何时使用node-mysql关闭MySQL连接?

时间:2012-11-07 08:44:33

标签: javascript mysql node.js

目前正在使用: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创建的内容并且无法重新连接?

2 个答案:

答案 0 :(得分:22)

无论致命错误如何,

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

同时检查destroy() method。这将导致立即终止底层套接字。

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

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

connection.on('error', function() {});

终止后,无法通过设计重新连接现有连接对象。

点击这里。它显示断开后连接回来。

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

答案 1 :(得分:3)

我认为正确的方法是在启动时为您的应用获取连接,并在应用关闭时end()