Когда закрыть соединение MySQL с помощью node -mysql?
В настоящее время используется: 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();
});
};
Положительный запрос работает отлично, но, вызывая его во второй раз, я получаю следующую ошибку
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)
Я должен оставить соединение открытым до тех пор, пока сервер не умрет?
UPDATE:
Когда я перемещаю mysql.createConnection в функцию запроса запроса следующим образом:
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 и не может быть повторно подключено?
Ответы
Ответ 1
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
Ответ 2
Я считаю, что правильный способ - просто получить соединение для своего приложения при запуске и end()
, когда ваше приложение закрывается.