Heim >Datenbank >MySQL-Tutorial >Warum funktioniert meine Node.js-Anmelde-API nicht mit Versprechen?
Ihre Node.js-Anmelde-API zeigt aufgrund eines Missverständnisses unerwartetes Verhalten wie Versprechen mit asynchronen Vorgängen interagieren. Lassen Sie uns jedes Problem angehen:
Ihre Funktion findUser() gibt kein Versprechen zurück. Stattdessen wird undefiniert sofort zurückgegeben, da die Datenbankabfrage asynchron ist und Zeit für die Ausführung benötigt. Um dies zu beheben, müssen Sie eine Rückruffunktion an die query()-Methode übergeben, die aufgerufen wird, wenn die Abfrage abgeschlossen ist:
me.findUser = function(params, res) { var username = params.username; return new Promise(function (resolve, reject) { pool.getConnection(function (err, connection) { if (err) { reject(err); } else { connection.query('select ...', [username], function (err, rows) { connection.release(); if (!err) { resolve(rows); } else { reject(err); } }); } }); }); }
Ihr Fehlerhandler wird nicht ausgelöst, da die Methode „reject()“ des Versprechens nie aufgerufen wird. In Ihrem Code geben Sie vom Rückruf für die Datenbankabfrage „false“ zurück, wenn ein Fehler auftritt. Stattdessen sollten Sie das Versprechen mit folgendem Fehler ablehnen():
me.findUser = function(params, res) { // ... return new Promise(function (resolve, reject) { // ... connection.query('...', [username], function (err, rows) { connection.release(); if (!err) { resolve(rows); } else { reject(err); } }); }); }
Hier ist eine korrigierte Version Ihrer Login-Routendatei verwendet Versprechen richtig:
module.exports = function(app) { app.post('/login/', async function(req, res, next) { try { // Find user in database var rows = await loginM.findUser(req.body, res); // Do something with the data var result = await loginC.doSomething(rows); console.log("Success"); } catch (err) { console.log("Failed: " + err.message); } }); }
Durch die Verwendung von Versprechen stellen Sie sicher, dass jeder Schritt in Ihrer Anmelde-API nacheinander ausgeführt wird. Das Schlüsselwort „await“ lässt den Code auf die Auflösung des Versprechens warten, bevor er fortfährt, und stellt so sicher, dass der nächste Schritt Zugriff auf die Daten des vorherigen Schritts hat. Darüber hinaus können Sie durch die Verwendung von try/catch alle Fehler behandeln, die während des Prozesses auftreten können.
Das obige ist der detaillierte Inhalt vonWarum funktioniert meine Node.js-Anmelde-API nicht mit Versprechen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!