2016-05-11 15 views
0

Nur herumspielen mit meinem ersten Login-System, basierend auf Nodejs/Express/Mungo/Pass.So fangen Sie Fehlercode in Mungo

Ich habe mehr Beiträge zu diesem Thema gefunden, aber sie alle sind etwas anders als meins.

Modell:

module.exports = mongoose.model('User',{ 
id: String, 
username: String, 
password: String, 
email: { type: String, unique: true } 
}); 

Für Benutzername eine Abfrage verwendet, um zu prüfen, ob Benutzernamen genommen bereits. Aber das ist nicht der richtige Weg. Ich habe gelernt, dass die Datenbank selbst dies überprüfen muss. Deshalb versuche ich es auf dem E-Mail-Feld.

einen neuen Benutzer zu speichern:

// save the user 
        newUser.save(function(err) { 
         if (err){ 
          console.log('Error in Saving user: '+err); 
          //throw err; // server stops working immediately!! 
          return done(null, false, req.flash('message','DB error...')); 
         } 
         console.log('User Registration succesful');  
         return done(null, newUser); 
        }); 

Ich habe Schrägstriche vor "throw err", da der Knoten Server sofort stoppt, wenn zu "werfen" versuchen. Ich habe den return done (...) Teil kopiert/eingefügt, was gut funktioniert.

Konsole Fehlermeldung:

Error in Saving user: MongoError: insertDocument :: caused by :: 11000 
E11000 duplicate key error index: mydb.users.$email_1 dup key: { : 
"[email protected]" } 

Problem: Wenn ein Datenbankfehler occures, ich kann nicht davon ausgehen, es wird immer ein doppelter Einsatzfehler, also muss ich auf das überprüfen, so kann ich zeigen, eine Nachricht über doppelte E-Mail-Adressen oder eine andere nützliche Nachricht.

Ich kann nicht so etwas wie finden:

if(errorcode == E11000) 
message="duplicate email" 
else 
    message="an error occured bla bla" 

Antwort

2

Der Fehlercode in err.code gespeichert ist, so dass Sie es wie folgt überprüfen:

if (err) { 
    if (err.code && err.code === 11000) { 
    message = "duplicate email"; 
    } else { 
    message = "an error occured bla bla"; 
    } 
} 
+0

Dank, und was ist mit der E-Mail selbst ? oder besser: wie sieht es aus? – Terradon

+1

@Terradon versuchen 'err.toJSON(). Op.email' (obwohl ich keine Ahnung habe, ob das auf allen Versionen des MongoDB-Treibers funktioniert, scheint es ziemlich intern und AFAIK ist es völlig undokumentiert). 'err' selbst ist eine Instanz von [' WriteError'] (http://mongodb.github.io/node-mongodb-native/2.1/api/WriteError.html), FWIW. – robertklep

Verwandte Themen