问题描述
我有我的 GET 端点,它只是一个简单的 SELECT * FROM tableName 并返回表中的所有行,但它一直挂着。当我在 POSTMAN 本地点击它时,它只是继续旋转
发送请求...并且程序永远不会出错。 在 connection.query(...) 之后 get 端点挂起,第四个 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”日志,有什么想法吗?
我注意到,如果我在 postman 中取消无休止的请求并再次点击端点,我会收到 PROTOCOL_ENQUEUE_AFTER_QUIT 错误
编辑
我将代码更改为:
router.get('/allRows',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}`),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 时,它只是跳过它并且没有进入箭头函数。
debugger after connection.query
解决方法
根据模块文档,connection.connect 将构建到数据库的实时链接。
在服务器启动时调用它,并在服务器关闭时停止它。
当您想解决请求时调用 connection.query。
connection.connect()
router.get(
.....
connection.query()
)
server.on(‘close’,()=> connection.close()) // I guess
连接错误:
connection.connect(function(err) {
console.log(err.code); // 'ECONNREFUSED'
console.log(err.fatal); // true
});
router.get(
.....
connection.query()
)
server.on(‘close’,()=> connection.close()) // I guess