【发布时间】:2021-01-25 01:47:21
【问题描述】:
我有我的 GET 端点,它只是一个简单的 SELECT * FROM tableName 并返回表中的所有行,但它一直挂起。当我在本地用 POSTMAN 打它时,它一直在旋转
发送请求...并且程序永远不会出错。 get 端点在 connection.query(...) 之后挂起,第四个 console.log("HIT) 没有打印
router.get('/allRows', async (req, res) => {
console.log("HIT")
if (req.query.tableName) {
console.log("HIT")
connection.connect((err) => {
if (err) console.log(err);
console.log("HIT")
connection.query(`SELECT * FROM ${req.query.tableName};`), (err, result, fields) => {
console.log("HIT")
if (err) console.log(err);
console.log(result)
res.status(200).json({
message: `Successfully got all data from ${req.query.tableName}`,
result: result
});
};
connection.end((err) => {
if (err)
console.error("Error when closing connection", err)
});
})
}
else {
res.status(400).json({
message: `Please provide table name`,
});
console.log('Missing table name');
}
});
我目前有 3 个“HIT”日志,有什么想法吗?
我注意到,如果我在邮递员中取消无休止的请求并再次点击端点,我会收到 PROTOCOL_ENQUEUE_AFTER_QUIT 错误
编辑
我将代码更改为:
router.get('/allRows', async (req, res) => {
console.log("HIT")
// also another guard for table name inside an array is needed
if (req.query.tableName) {
console.log("HIT")
connection.connect();
connection.query(`SELECT * FROM ${req.query.tableName}`), (err, rows, fields) => {
console.log("HIT", rows)
if (err) console.log(err);
res.status(200).json({
message: `Successfully got all data from ${req.query.tableName} LIMIT 1`,
result: rows
});
console.log("result")
};
}
else {
res.status(400).json({
message: `Please provide table name`,
});
console.log('Missing table name');
}
});
仍然遇到同样的问题,并且只有 2 次控制台点击...我已经运行了调试器,当它到达 connection.query 时,它只是跳过它并且不进入箭头函数。
【问题讨论】:
-
旁注:让表名作为外部查询参数是非常糟糕的做法。
-
谢谢,也许我可以用 mysql.escape() 转义它?它是一个仅供我使用的私有 API - 你认为这样可以吗,或者你能提出更好的建议吗? @TimBiegeleisen
-
对有效表名使用白名单
-
我认为问题出在 connection.connect 上,有任何文档吗?
-
我正在使用这个 NPM 模块npmjs.com/package/mysql
标签: mysql node.js get mysqlconnection