node-mysql连接结束或销毁无法正常工作

Ces*_*aga 5 mysql node.js node-mysql

我不知道为什么mysql.end()或mysql.destroy()不能像我期望的那样工作.这是我的代码.

var mysql      = require('mysql');
var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    database: 'db',
    password: ''
});
connection.connect();
connection.query('SELECT * FROM ofertas ', function (err, rows, fields)
{
    if (err) console.log(err);
    else
    {
        console.log(rows);
    }

});
connection.destroy(function (err)
{
    if (err) throw err;
});
Run Code Online (Sandbox Code Playgroud)

我执行此代码,然后我转到mysql命令行,我输入:

show status like 'Conn%';
Run Code Online (Sandbox Code Playgroud)

在节点代码之前

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections   | 3     |
+---------------+-------+
Run Code Online (Sandbox Code Playgroud)

节点代码之后

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections   | 4     |
+---------------+-------+
Run Code Online (Sandbox Code Playgroud)

connection.state ='已断开'

谢谢

Pet*_*rtt 1

您需要等到查询完成才能销毁连接。尝试

connection.query('SELECT * FROM ofertas ', function (err, rows, fields)
{
    if (err) console.log(err);
    else
    {
        console.log(rows);
    }
    connection.destroy();
});
Run Code Online (Sandbox Code Playgroud)

  • 不要使用connection.end(); 我认为它已经过时了。如果您正在使用连接池,则connection.release()会将其返回到池中,以便另一个查询可以重新使用它,否则它只会休眠,直到超时将其清除(运行MySQL SHOW PROCESSLIST)。这可能不是您想要的行为。Connection.destroy() 完全删除连接。顺便说一句,我遇到的问题是由于代码的完全独立的部分进行查询而不是破坏它。我用 mysql 代码中的 console.logs 追踪到了它。Connection.threadId指的是Linux进程。 (2认同)