ExpressJS - 在POST请求中发送变量作为响应

时间:2017-01-14 17:11:14

标签: mysql sql node.js express

我正在尝试检索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);
});

2 个答案:

答案 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);
    })
});