現在使用中: 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リクエストは完全に正常に機能しますが、2回目に呼び出すと、次のエラーが表示されます
_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
_が作成したものを閉じ、再接続できないことを意味しますか?
connection.end() は、致命的なエラーに関係なくジョブを実行します。 COM_QUIT
パケットを送信する前に致命的なエラーが発生した場合、err
引数がコールバックに提供されますが、それにもかかわらず接続は終了します。
destroy()メソッド も確認してください。これにより、基礎となるソケットが即座に終了します。
エラーハンドラを追加できます。
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
適切な方法は、起動時にアプリの接続を取得し、アプリが終了したときにend()
するだけだと思います。