web-dev-qa-db-fra.com

Quand fermer la connexion MySQL en utilisant node-mysql?

Actuellement utilisé: https://github.com/felixge/node-mysql

J'ai le code suivant:

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();
    });          
};

La demande de vente fonctionne parfaitement, mais en l'appelant la deuxième fois, j'obtiens l'erreur suivante

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)

Suis-je censé laisser la connexion ouverte jusqu'à ce que le serveur meure?

MISE À JOUR: Lorsque je déplace le mysql.createConnection Dans la fonction de demande de vente comme ceci:

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();
    });          
};

Ça fonctionne bien. Cela signifie-t-il que connection.end() ferme ce que mysql.createConnection A créé et ne peut pas être reconnecté?

26
ninjaneer

connection.end () ça marche malgré l'erreur fatale. Si une erreur fatale se produit avant le COM_QUIT un paquet peut être envoyé, un argument err sera fourni au rappel, mais la connexion sera interrompue malgré cela.

Vérifiez également méthode destroy () . Cela entraînera une résiliation immédiate du socket sous-jacent.

Vous pouvez ajouter un gestionnaire d'erreurs.

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

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

Une fois terminé, un objet de connexion existant ne peut pas être reconnecté par conception.

Vérifiez ici. Cela montre la connexion après la déconnexion.

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

Je crois que la bonne façon est de simplement obtenir une connexion pour votre application au démarrage, et end() lorsque votre application se ferme.

3
Chris