32

目前使用:https ://github.com/felixge/node-mysql

我有以下代码:

var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'me',
    password : 'secret',
    database : 'Database1'
});
app.put('/api/upload', function(req, res, next)
{
    connection.connect();
    doMultipleQueries(function(err)
    {
        connection.end();
    });          
};

put 请求工作得很好,但是第二次调用它,我收到以下错误

events.js:68
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: Cannot enqueue Handshake after invoking quit.
    at Protocol._validateEnqueue (/Users/anon/Desktop/project Web/node_modules/mysql/lib/protocol/Protocol.js:110:16)

我应该保持连接打开直到服务器死机吗?

更新:当我mysql.createConnection像这样移动到 put 请求函数时:

var connection = null; 
app.put('/api/upload', function(req, res, next)
{
    connection = mysql.createConnection({
        host     : 'localhost',
        user     : 'me',
        password : 'secret',
        database : 'Database1'
    });
    connection.connect();
    doMultipleQueries(function(err)
    {
        connection.end();
    });          
};

它工作正常。这是否意味着connection.end()关闭mysql.createConnection创建的内容并且无法重新连接?

4

2 回答 2

33

connection.end()无论致命错误,它都能正常工作。COM_QUIT如果在发送数据包之前发生致命错误,err将向回调提供一个参数,但无论如何都会终止连接。

还要检查destroy() 方法。这将导致底层套接字立即终止。

您可以添加错误处理程序。

https://github.com/felixge/node-mysql/blob/master/Readme.md#error-handling

// I am Chuck Norris:
connection.on('error', function() {});

一旦终止,现有的连接对象就不能按设计重新连接。

在这里检查。它显示断开连接后重新连接。

https://github.com/felixge/node-mysql/blob/master/Readme.md#server-disconnects

于 2012-11-07T09:02:31.320 回答
3

我相信正确的方法是在启动时为您的应用程序建立连接,并end()在您的应用程序关闭时获得连接。

于 2013-12-26T00:30:27.390 回答