异步 pg 池查询需要永远完成
Async pg pool query takes forever to finish
我目前正在为我的数据库搜索引擎开发 login/register API。我正在使用 express@4.17.1、pg@7.18.2、PostgreSQL 12。问题是在其中一台机器上 (Ubuntu bionic 18.0.4 LTS) 对 /register 路由的查询解析得很好——用户保存在 postgres 数据库中,但在 Fedora 32 上,等待函数需要永远解析。
代码如下:
db.js:
const pool = new Pool({
host: "localhost",
user: "postgres",
password: "postgres",
port: 5432,
database: "jimjones"
});
module.exports = pool;
在jwtAuth.js中注册路由:
router.post("/register", validInfo, async (req, res) => {
const { email, name, password } = req.body;
try {
const user = await pool.query("SELECT * FROM users WHERE user_email = ", [
email
]);
//doesnt get past first query
if (user.rows.length > 0) {
return res.status(401).json("User already exist!");
}
const salt = await bcrypt.genSalt(10);
const bcryptPassword = await bcrypt.hash(password, salt);
let newUser = await pool.query(
"INSERT INTO users (user_name, user_email, user_password) VALUES (, , ) RETURNING *",
[name, email, bcryptPassword]
);
const jwtToken = jwtGenerator(newUser.rows[0].user_id);
return res.json({ jwtToken });
} catch (err) {
console.error(err.message);
res.status(500).send("Server error");
}
});
查询:
const user = await pool.query("SELECT * FROM users WHERE user_email = ", [
email
]);
Fedora 32上的req.body被解析,所以POST请求不是防火墙问题。
使用 Postman,该程序在此查询上失败(但仅在 Fedora 32 上)。两个数据库在两台机器上都有相同的表。 Sql select 在 psql 中查询 returns 两台机器上的数据。
关于如何 fix/debug 有什么建议吗?任何帮助将不胜感激。
升级到 pg@8.3.0 解决了这个问题。
我目前正在为我的数据库搜索引擎开发 login/register API。我正在使用 express@4.17.1、pg@7.18.2、PostgreSQL 12。问题是在其中一台机器上 (Ubuntu bionic 18.0.4 LTS) 对 /register 路由的查询解析得很好——用户保存在 postgres 数据库中,但在 Fedora 32 上,等待函数需要永远解析。
代码如下:
db.js:
const pool = new Pool({
host: "localhost",
user: "postgres",
password: "postgres",
port: 5432,
database: "jimjones"
});
module.exports = pool;
在jwtAuth.js中注册路由:
router.post("/register", validInfo, async (req, res) => {
const { email, name, password } = req.body;
try {
const user = await pool.query("SELECT * FROM users WHERE user_email = ", [
email
]);
//doesnt get past first query
if (user.rows.length > 0) {
return res.status(401).json("User already exist!");
}
const salt = await bcrypt.genSalt(10);
const bcryptPassword = await bcrypt.hash(password, salt);
let newUser = await pool.query(
"INSERT INTO users (user_name, user_email, user_password) VALUES (, , ) RETURNING *",
[name, email, bcryptPassword]
);
const jwtToken = jwtGenerator(newUser.rows[0].user_id);
return res.json({ jwtToken });
} catch (err) {
console.error(err.message);
res.status(500).send("Server error");
}
});
查询:
const user = await pool.query("SELECT * FROM users WHERE user_email = ", [
email
]);
Fedora 32上的req.body被解析,所以POST请求不是防火墙问题。 使用 Postman,该程序在此查询上失败(但仅在 Fedora 32 上)。两个数据库在两台机器上都有相同的表。 Sql select 在 psql 中查询 returns 两台机器上的数据。
关于如何 fix/debug 有什么建议吗?任何帮助将不胜感激。
升级到 pg@8.3.0 解决了这个问题。