diff --git a/history/2026-08-18.md b/history/2026-08-18.md index 2036ab8..2fe5a4d 100644 --- a/history/2026-08-18.md +++ b/history/2026-08-18.md @@ -90,3 +90,29 @@ getpgdata/ - `package-lock.json` закоммичен (зависимости: express, ejs, pg). - `node_modules/` в `.gitignore`. - Версия в `package.json` повышается при каждой правке кода (правило проекта). + +## 6. Минимальный вывод на экран (фикс падения пода) + +Несмотря на фикс порта (п.4), деплой снова упал — под `nodejsk8s` не поднялся. + +**Требование пользователя:** «сделай код минимальным. Сам код не удаляй — сделай вывод +на экран какой-то информации и всё». + +**Решение (коммит c8a776e, версия 1.0.2):** +- Роут `GET /` переписан так, чтобы **не зависеть от EJS-шаблонов**: отдаёт простой HTML + напрямую (`res.send`), выводя: + - версию Node, `APP_ENV`, PID + - конфиг БД (host, port, database, user) + - статус подключения к БД (или текст ошибки) + - список таблиц (или сообщение об ошибке) +- Каждая попытка работы с БД обёрнута в try/catch, поэтому страница **всегда** отдаёт 200 + с информацией, даже если БД недоступна. +- Весь остальной код (роуты `/table`, `/query`, `/healthz`, `dbConfig`, `pool`) **не удалён** — + только главная страница упрощена. + +**Проверено:** синтаксис OK; запуск без env `PORT` → слушает `0.0.0.0:3000`; +`GET /` → 200 (HTML с конфигом и статусом БД), `GET /healthz` при недоступной БД → 503 degraded. + +**⚠️ Точная причина падения пода по-прежнему не подтверждена** (нет доступа к логам Nubes). +Если под не поднимется и после этого — смотреть логи `nodejsk8s` Deployment в Nubes UI: +replica не активна (CrashLoopBackOff, invalidImage, порт/health, зависший старт). diff --git a/package.json b/package.json index a5c1f6f..3f209dc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "getpgdata", - "version": "1.0.1", + "version": "1.0.2", "description": "Node.js приложение для доступа к PostgreSQL (managed k8s, internal-only)", "main": "server.js", "scripts": { diff --git a/server.js b/server.js index 7725ef7..ed1a518 100644 --- a/server.js +++ b/server.js @@ -62,31 +62,80 @@ app.get('/healthz', async (req, res) => { } }); -// Главная: состояние подключения + список таблиц +// Главная: минимальный вывод информации на экран. +// Не зависит от EJS-шаблонов — всегда отдаёт HTML, даже если БД недоступна. app.get('/', async (req, res) => { - let tables = null; - let error = null; + const cfg = dbConfig(); + + let dbStatus = 'нет данных'; + let tablesHtml = ''; try { - const r = await pool.query( + const r = await pool.query('SELECT version() AS v'); + dbStatus = 'подключено: ' + (r.rows[0] && r.rows[0].v ? r.rows[0].v : 'ok'); + } catch (e) { + dbStatus = 'недоступна: ' + (e && e.message ? e.message : String(e)); + } + + try { + const t = await pool.query( `SELECT schemaname, tablename FROM pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema') ORDER BY schemaname, tablename` ); - tables = r.rows; + if (t.rows && t.rows.length) { + tablesHtml = t.rows + .map((r) => `
Node.js ${esc(process.version)} · env=${esc(APP_ENV)} · PID=${esc(String(process.pid))}
+ +| Host | ${esc(cfg.host)} |
|---|---|
| Port | ${esc(String(cfg.port))} |
| Database | ${esc(cfg.database)} |
| User | ${esc(cfg.user)} |
| Статус | ${esc(dbStatus)} |
| Схема | Таблица |
|---|