2017-12-27 2 views
0

Ich arbeite an einer Funktion, die einen booleschen Wert zurückgibt. Dieser Wert stellt dar, ob ein Benutzer in der Datenbank vorhanden ist. Zur Zeit habe ich folgendes:Rückgabe Boolescher Wert von MYSQL in NodeJS

Ich benutze 'console.log (result.length)', um zu überprüfen, ob es Ergebnisse gibt. Wenn ich etwas Eingang testen, habe ich dies:

false 
1 

Diese seltsame ist, weil es ein Ergebnis ist, so Zeilen gleich 1 sein sollte, aber dann gibt es falsch statt wahr. Ist es möglich, dass der Wert der Zeilen nicht in ‚database.query (...‘ geändert

+0

.query akzeptiert als zweites Argument eine Funktion, die aufgerufen wird, wenn die Abfrage abgeschlossen ist. Mit anderen Worten, die ursprüngliche Funktion kehrt möglicherweise zurück, bevor die als Argument in die Abfrage übergebene Funktion aufgerufen wird. – Riwen

+0

Haben Sie die Zeilen vor der Rückkehr gekonnt? Enthält das einen? – Deep

+0

Wenn ich 'console.log (rows)' kurz vor 'return rows> 0' setze, gibt es mir '1'. Aber die Funktion gibt false zurück – Soccerrlife

Antwort

0

Weil Ihre Funktion checkIfExists asynchron ist, ich glaube, Sie Callback-System wie folgt verwenden sould:

function checkIfExists(callback) { 
    var sql = "SELECT * FROM Users WHERE user = " + mysql.escape(req.body.username); 
    var rows = 0; 
    database.query(sql, function (err, result, fields) { 
     if (err) { 
      callback(err, null); 
     } 
     else { 
      console.log(result.length); 
      rows += result.length; 
      callback(null, rows > 0); 
     } 
    }); 
} 

checkIfExists(function(err, isExists) { 
    if (err) { 
     // An error occured 
    } 
    else { 
     console.log(isExists); 
    } 
}); 

EDIT

Sie können auch Ihre checkIfExists Funktion wie diese simlify:

function checkIfExists(callback) { 
    var sql = "SELECT * FROM Users WHERE user = " + mysql.escape(req.body.username); 
    database.query(sql, function (err, result) { 
     callback(err, result ? result.length > 0 : false); 
    }); 
} 

Weitere Informationen hier: Understanding Async Programming in Node.js

Ich hoffe, es hilft.

+0

Dieser Code zeigt auch die 1 und falsch. Aber dann umgekehrt. – Soccerrlife

+0

Entschuldigung, überprüfen Sie meine Bearbeitung mit Rückruf (null, Zeilen> 0); – Sparw

+0

Vielen Dank. Allerdings sollte die Funktion nur von 'checkIfExists()' aufgerufen werden, damit ich sie in einer if-Anweisung verwenden kann: 'if (checkIfExists()) {.....}' – Soccerrlife