2016-06-09 10 views
2

Ich verwende Mongoose:MongoDB-Suche gibt keinen Fehler zurück, wenn ein Datensatz nicht existiert?

user.find({username: 'xyz'}, function(err, doc){ 
    if(err){ 
    res.render('error', {errorMsg: "Error blah blah"}) 
    } 
}); 

ich einen Benutzer bewusst bin mit den Fehlern nicht xyz existiert und es Auslösung nicht, dachte ich, es wegen Mungo ist, aber dann habe ich versucht, in MongoDB Shell und Ja, MongoDB gibt keinen Fehler zurück, wenn ein Datensatz nicht existiert.

>db.accounts.find({username: 'xyz'}) 
> // no error, blank line 

Wie gehe ich damit um? Ich möchte, dass die Ausführung des Skripts beendet wird, wenn ein Benutzer nicht existiert.

+0

Mögliche Betrogene von https://stackoverflow.com/questions/12031041/node-js-mongojs-findone-callback-returning-error-as-null – JohnnyHK

+0

Ja, das ist vor 3 Jahren. Gerade mit NodeJS ändern sich die Dinge ständig. –

+0

Sicher, aber das hat sich nicht geändert. Eine Abfrage, die keinem entspricht, gibt nur eine leere Ergebnismenge (für "find") oder ein Null-Ergebnis (für "findOne") zurück. – JohnnyHK

Antwort

2

Nun, wenn der "Benutzername" nicht existiert, bedeutet das nicht, dass es einen Fehler gibt. Stattdessen solltest du so etwas tun.

user.find({ username: 'xyz' }, function(err, doc){ 
    if(doc.length === 0 || err){ 
    res.render('error', { errorMsg: "Error blah blah" }) 
    } 
}); 

Oder ausführlichere Version:

user.find({ username: 'xyz' }, function(err, doc) { 
    if(err){ 
     res.render('error', { errorMsg: "Error blah blah" }) 
    } else { 
     if (doc.length === 0) { 
      console.log("User doesn't exist"); 
     } else { 
      //do something 
     } 
    } 
}); 
+0

Ja, ich würde annehmen, dass es einen Fehler auslösen würde. Vielen Dank! Ich habe nicht daran gedacht zu prüfen, ob Doc leer ist! –

1
var user = db.accounts.findOne({username: 'xyz'}); 

if (!user) { 
    // handle error 
    alert('fail'); 
} 
+2

Danke, aber ich kann mir keinen Weg vorstellen, wie ich das nutzen kann. Ich meine, es würde in der Mongo-Shell funktionieren (es gibt keinen Alarm in einer Shell oder NodeJS), aber es sollte einen Callback geben, der aufgrund der asynchronen Natur von NodeJS ein Ergebnis liefert. Auch wenn ich Mongoose nicht verwende, bin ich mir nicht sicher, ob das funktionieren wird, es sei denn, es handelt sich um einen neuen Hack, den ich nicht kenne. Aber ja, so würden Sie es in einer synchronen Umgebung tun. –

Verwandte Themen