我正在尝试检索SQL的insertId并将其发送回前端。但是当我执行res.send(result.insertId)时,我收到500错误。如何成功将sql的insertId传递到前端?
router.post('/list', function(req, res, next) {
var lastIncrement = 0;
pool.getConnection(function (error, connection) {
connection.query('INSERT INTO test_table SET Name = ?, Age = ?', [req.body.Name, req.body.Age], function (error, result) {
if(error)
console.error(error);
lastIncrement = result.insertId;
connection.release();
});
});
res.send(lastIncrement);
});
答案 0 :(得分:0)
您的代码中存在一个问题,确保您在完成查询之前返回。所以你必须从回调函数内部返回。
router.post('/list', function(req, res, next) {
var lastIncrement = 0;
pool.getConnection(function (error, connection) {
connection.query('INSERT INTO test_table SET Name = ?, Age = ?', [req.body.Name, req.body.Age], function (error, result) {
if(error)
console.error(error);
lastIncrement = result.insertId;
connection.release();
res.send(lastIncrement);
});
});
});
答案 1 :(得分:0)
由于nodejs的异步性质,您的res.send在查询返回值之前正在执行。您可以使用.then
承诺确保在从查询中获取值后发生res.send
,或在分配值后使用res.send
。
你可以试试这个:
pool.getConnection(function (error, connection) {
connection.query('INSERT INTO test_table SET Name = ?, Age = ?', [req.body.Name, req.body.Age], function (error, result) {
if(error)
console.error(error);
lastIncrement = result.insertId;
connection.release();
}).then(function(){
res.send(lastIncrement);
})
});