Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
节点mysql连接结束或销毁不工作_Mysql_Node.js_Node Mysql - Fatal编程技术网

节点mysql连接结束或销毁不工作

节点mysql连接结束或销毁不工作,mysql,node.js,node-mysql,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

我不知道为什么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;
});
我执行这段代码,然后转到mysql命令行并键入:

show status like 'Conn%';
前节点代码

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections   | 3     |
+---------------+-------+
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections   | 4     |
+---------------+-------+
后节点代码

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections   | 3     |
+---------------+-------+
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections   | 4     |
+---------------+-------+
connection.state='disconnected'


谢谢

您需要等到查询完成后才能破坏连接。试一试

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

我认为节点mysql可能有问题——我遇到了一个问题,连接被破坏了,但另一个连接马上就被创建了(这就是为什么我最终使用了这个线程)。尝试添加
console.log(connection.threadId)
在破坏连接之前,如果线程id增加了1,请检查mysql或ps aux。尽管如此,在破坏连接之前,您仍然需要等待查询完成。当使用connection.end()时,所有查询回调都会执行,当它们完成时,会向mysql服务器发送一个finish paquet。在回调函数中使用connection.destroy()不一样吗?顺便说一下,我想我误解了mysql连接和线程之间的区别。连接是所有过去的连接,线程是当前的连接?不要使用connection.end();我认为它过时了。如果您使用的是连接池,connection.release()会将其返回到池中,以便另一个查询可以重新使用它,否则它将一直休眠,直到超时清除为止(运行MySQL SHOW PROCESSLIST)。这可能不是你想要的行为。Connection.destroy()完全删除连接。顺便说一句,我遇到的问题是由于代码的一个完全独立的部分生成了一个查询,而没有销毁它。我通过mysql代码中的console.logs找到了它。Connection.threadId指的是Linux进程。