调用后退出节点MySQL不能入队查询(Node Mysql Cannot Enqueue a que

2019-08-06 21:12发布

我在哪里可以关闭MySQL连接?

我需要按顺序运行查询。 我写的代码看起来像这样目前:

var sqlFindMobile = "select * from user_mobiles where mobile=?";
var sqlNewUser = "insert into users (password) values (?)";
//var sqlUserId = "select last_insert_id() as user_id";
var sqlNewMobile = "insert into user_mobiles (user_id, mobile) values (?,?)";
connection.connect(function(err){});
var query = connection.query(sqlFindMobile, [req.body.mobile], function(err, results) {
    if(err) throw err;
    console.log("mobile query");
    if(results.length==0) {
        var query = connection.query(sqlNewUser, [req.body.password], function(err, results) {
            if(err) throw err;
            console.log("added user");
            var user_id = results.insertId;
            var query = connection.query(sqlNewMobile, [user_id, req.body.mobile], function(err, results) {
                if(err) throw err;
                console.log("added mobile");
                    //connection.end();
                });
        });
    }
});
//connection.end();

(我与节点,NPM-Express和NPM-mysql的初学者。我已经尝试了“快递MySQL不能排队”,找到相关的问题,并没有发现他们,让搜索。)

Answer 1:

我解决了这个问题,使用此方法。

connection.end()在你的connection.query功能

固定的代码是here



Answer 2:

如果您使用的节点mysql的模块通过felixge那么你就可以在任何时候调用connection.end()完成所有的connection.query的(后)调用,因为它会等待所有查询结束之前终止连接。

见例如这里了解更多信息。

如果你想在系列运行大量的查询,你应该考虑的异步模块 ,它为处理一系列的异步函数是伟大的(即那些有回调)。



Answer 3:

也许问题是,经过连接已经关闭执行MySQL查询,由于节点的异步特性。 尝试使用此代码线程退出前有权要求connection.end():

function exitHandler(options, err) {
    connection.end();
    if (options.cleanup)
        console.log('clean');
    if (err)
        console.log(err.stack);
    if (options.exit)
        process.exit();
}

//do something when app is closing
process.on('exit', exitHandler.bind(null, {cleanup: true}));

代码改编自@Emil Condrea, 只是node.js中退出之前做了清理行动



Answer 4:

在我的情况connection.end是被称为在一个点,这是难以察觉,所以一个错误的呼叫connection.end可能是与该错误的问题



文章来源: Node Mysql Cannot Enqueue a query after calling quit