Mysql查询返回未定义的node.js

ehxuflar  于 2023-05-05  发布在  Mysql
关注(0)|答案(1)|浏览(146)

我正在使用Digital Ocean的数据库集群,并尝试从我的node.js API发出查询请求
这是我正在使用的代码

app.get('/current', (req, res) => {
// THIS GETS THE INFORMATION IF YOU WANT DIFFERENT INFO CHANGE THE SQL QUERY
const SQL = "SELECT * FROM ParkingLot;"
db.query(SQL,(err, result) =>{
    console.log(result)
    res.send(result);
})
})

在控制台日志中打印undefined。我知道我在数据库中有值。我只是不知道该怎么办了。我试过使用async来解决这个问题,但我不确定我是否正确地使用了它。
这是我尝试过的解决方案之一

app.get('/current', async (req, res) => {
// THIS GETS THE INFORMATION IF YOU WANT DIFFERENT INFO CHANGE THE SQL QUERY
const result = await numFullSpaces();
res.send(result)
console.log(numFullSpaces());

})

function numFullSpaces(){
    let sql = "SELECT * FROM ParkingLot;"
    return new Promise((res, rej) => {
        db.query(sql, (err, result) => {
            if (err) {
                rej(err);
            }else{
                res(result)
            }
        })
    })
}

由此我得到了错误
triggerUncaughtException(err,true /* fromPromise */);^
错误:连接ETIMEDOUT
我不知道下一步该怎么办。

ig9co6j1

ig9co6j11#

不要直接将用户输入连接到SQL查询中,而是使用带有占位符的参数化查询。这将通过自动转义用户输入来防止SQL注入攻击。

const SQL = "SELECT * FROM ParkingLot WHERE id = ?";
db.query(SQL, [req.params.id], (err, result) => {
  if (err) {
    console.error(err);
    res.status(500).send("Internal Server Error");
  } else {
    console.log(result);
    res.send(result);
  }
});

加上:检查err参数。如果出现错误,则会将其记录到控制台,并向客户端发送500 Internal Server Error响应。如果没有错误,结果将记录到控制台并发送到客户端。

相关问题