Надеюсь, это минимально жизнеспособный пример ->
routes.ts
import express, { Request, Response } from "express";
import { QueryResult, Pool } from "pg";
const pool = new Pool({
user: process.env.DOCKER_USER,
host: "localhost",
database: process.env.DOCKER_DB,
password: process.env.DOCKER_PASSWORD,
port: 5432,
});
const router = express.Router();
router.post("/log/hub", (req: Request, res: Response) => {
console.info("Made it here!");
const username = "PLACEHOLDER";
const json = { a: "b" };
const now = new Date();
const cachedId = "12345";
pool.query(
"INSERT INTO data_actions (username, json_payload, cache_id, action_timestamp) VALUES ($1, $2, $3, $4)",
[username, json, cachedId, now],
(error: Error, results: QueryResult) => {
if (error) {
throw error;
}
res.status(201).send(results);
}
);
});
export = router;
echo $DOCKER_USER,$DOCKER_DB,$DOCKER_PASSWORD
производит
docker, docker, docker
Я проверил в клиенте, что эти значения соответствуют значениям, напечатанным выше, и что они соответствуют учетным данным, установленным в контейнере Docker для Postgres. Я могу подключиться к базе данных через порт 5432 с помощью pgAdmin4 и просмотреть ожидаемую базу данных, которая выглядит следующим образом:
List of relations
Schema | Name | Type | Owner
--------+------------------+-------+--------
public | data_actions | table | docker
(1 row)
SELECT * FROM data_actions;
производит
username | json_payload | cache_id | action_timestamp
----------+--------------+----------+------------------
(0 rows)
Я могу подключиться к конечной точке экспресс-маршрутизатора на локальном хосте: 5000, поэтому все, что находится ниже по течению, не является проблемой. Я думаю, что проблема кроется где-то в том, как я использую pg
. Выделяется ли здесь что-нибудь очевидное? У меня такое чувство, что я пропускаю что-то маленькое, и я бьюсь головой о клавиатуру, пытаясь понять, что происходит не так.
Обновлено: отношение показывает 1 строку, где оператор select возвращает 0 строк. Это потому, что я удалил строку, которую я вставил из pgAdmin, прежде чем опубликовать здесь. Извините за отвлекающий маневр.
@Michiel Нет на оба вопроса, что, я думаю, означает, что проблема связана с соединением. Хотя это не имеет смысла. Я трижды проверил учетные данные, порт и, конечно же, он работает на моей машине. Есть ли способ диагностировать проблемы аутентификации с помощью клиента pg? Я бы подумал, что это будет в обратном вызове подключения, но это тоже не выполняется.
Какая версия nodejs и pg установлена? Неделю назад у меня была похожая проблема после обновления с узла 12 до 14, пришлось обновить и pg. Кстати, минимальный жизнеспособный пример можно сделать без экспресса.
Сработало ли обновление pg или понижение версии nodejs?
@Michiel Спасибо за продолжение, я должен был отчитаться. Обновление pg решило проблему. Если вы хотите опубликовать комментарий в качестве ответа, я приму его.
Попробуйте обновить модуль pg
. Старые версии могут не работать с более новыми версиями Nodejs.
Работает ли это в обратном вызове
pool.connect
? Вызывается ли обратный вызовpool.on
?