webentwicklung-frage-antwort-db.com.de

Knoten Mysql kann eine Abfrage nach dem Aufruf von quit nicht starten

wo schließe ich die mysql-verbindung?

Ich muss Abfragen nacheinander ausführen. Ich schreibe Code, der derzeit so aussieht:

var sqlFindMobile = "select * from user_mobiles where mobile=?";
var sqlNewUser = "insert into users (password) values (?)";
//var sqlUserId = "select last_insert_id() as user_id";
var sqlNewMobile = "insert into user_mobiles (user_id, mobile) values (?,?)";
connection.connect(function(err){});
var query = connection.query(sqlFindMobile, [req.body.mobile], function(err, results) {
    if(err) throw err;
    console.log("mobile query");
    if(results.length==0) {
        var query = connection.query(sqlNewUser, [req.body.password], function(err, results) {
            if(err) throw err;
            console.log("added user");
            var user_id = results.insertId;
            var query = connection.query(sqlNewMobile, [user_id, req.body.mobile], function(err, results) {
                if(err) throw err;
                console.log("added mobile");
                    //connection.end();
                });
        });
    }
});
//connection.end();

(Ich bin ein Anfänger mit node, npm-express und npm-mysql. Ich habe versucht, SO nach "express mysql can enqueue" zu suchen, um verwandte Fragen zu finden und habe sie nicht gefunden.)

22
Kinjal Dixit

Ich habe dieses Problem mit dieser Methode behoben.

connection.end () in Ihrer connection.query-Funktion

Der feste Code lautet here

25
unlimited

Wenn Sie das Modul node-mysql von felixge verwenden, können Sie connection.end () jederzeit aufrufen, nachdem Sie alle Aufrufe von connection.query () durchgeführt haben, da dies der Fall ist Warten Sie, bis alle Abfragen abgeschlossen sind, bevor die Verbindung beendet wird.

Siehe das Beispiel hier für weitere Informationen.

Wenn Sie viele Abfragen in Serie ausführen möchten, sollten Sie mit dem Modul async nachsehen . Dies ist ideal für den Umgang mit einer Reihe von asynchronen Funktionen (d. H. Mit Callback-Funktionen).

10
matthewtole

Möglicherweise besteht das Problem darin, dass die mySQL-Abfrage ausgeführt wird, nachdem die Verbindung aufgrund der asynchronen Natur des Knotens bereits geschlossen ist. Verwenden Sie diesen Code, um connection.end () direkt vor dem Beenden des Threads aufzurufen:

function exitHandler(options, err) {
    connection.end();
    if (options.cleanup)
        console.log('clean');
    if (err)
        console.log(err.stack);
    if (options.exit)
        process.exit();
}

//do something when app is closing
process.on('exit', exitHandler.bind(null, {cleanup: true}));

Code wurde von @Emil Condrea angepasst, führt eine Bereinigungsaktion aus, bevor node.js beendet wird

5
user3413723

In meinem Fall wurde connection.end an einer Stelle aufgerufen, die schwer zu erkennen war. Daher könnte ein fehlerhafter Aufruf von connection.end das Problem mit diesem Fehler sein 

1
Kyle Roux