【发布时间】:2021-04-03 03:14:49
【问题描述】:
希望这是一个最小的可行示例 ->
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.log("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 设置的凭据相匹配。我可以使用 pgAdmin4 连接到端口 5432 上的数据库并查看我期望的数据库,如下所示:
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)
我能够到达 localhost:5000 的快速路由器端点,所以下游的一切都不是问题。我认为问题在于我如何使用pg。这里有什么明显的突出之处吗?我有一种感觉,我错过了一些小东西,我正用头敲击键盘试图找出问题所在。
EDIT:关系显示 1 行,其中 select 语句返回 0 行。这是因为我在发布之前删除了从 pgAdmin 插入的行。对不起,红鲱鱼。
【问题讨论】:
-
它是否在
pool.connect回调中工作?pool.on的回调被调用了吗? -
@Michiel 对这两个问题都没有,我想这意味着问题出在连接上。虽然没有意义。我已经三重检查了凭据、端口,当然它正在我的机器上运行。有没有办法诊断 pg 客户端的身份验证问题?我认为这将在连接回调中,但也根本没有执行。
-
安装的是什么版本的nodejs和pg?一周前,我从节点 12 更新到 14 后遇到了类似的问题,我也必须更新 pg。顺便说一句,可以在没有 express 的情况下制作一个最小的可行示例。
-
更新pg或降级nodejs有用吗?
-
@Michiel 感谢您的跟进,我应该报告回来。更新 pg 解决了这个问题。如果您想发表评论作为答案,我会接受。
标签: node.js typescript postgresql express node-postgres