2016-09-10 2 views
0

In meiner App verwende ich mongoose, um mit mlab zu verbinden, um die Daten zu veröffentlichen. Wenn ich den Postboten benutze, um den Post zu testen, bekomme ich die Daten in der Datenbank aktualisiert. aber die Konsole wirft diesen Fehler:Mungo Wurffehler - wie man das beheben kann?

events.js:141 
     throw er; // Unhandled 'error' event 
    ^

TypeError: Cannot read property 'code' of null 
    at C:\Tutorials\try\NodePractical\MEAN-Family\app\routes\api.js:42:13 
    at C:\Tutorials\try\NodePractical\MEAN-Family\node_modules\mongoose\lib\model.js:3336:16 
    at C:\Tutorials\try\NodePractical\MEAN-Family\node_modules\mongoose\lib\document.js:1927:18 
    at nextTickCallbackWith0Args (node.js:420:9) 
    at process._tickCallback (node.js:349:13) 

Ich bin nicht in der Lage, diesen Fehler überhaupt zu verstehen. Wie behebe ich das? Und was ist falsch mit meinem Code hier?

Für die Referenz hier ist mein post api, die ich benutze:

.post(function(req, res){ 

       var family = new Family(); 

       family.username = req.body.username, 
       family.password = req.body.password, 
       family.familyLeader = req.body.familyLeader, 
       family.husband = req.body.husband, 
       family.wife = req.body.wife, 
       family.kids = req.body.kids; 

       family.save(function(err) { 

        if (err.code == 11000) { 
         return res.json({ success: false, message: 'A user with that username already exists. '}); 
        } 
        else { 
         res.send(err); 
        } 

        res.json({ message: 'Family created!' }); 

       }); 



      }) 

Antwort

2

Da jeder Knoten Rückruf callback(error, response) diese Signatur haben,

bedeutet dies, dass, wenn ein Fehler auftritt, wird der erste Parameter enthalten der Fehler und der zweite wird null sein. Wenn jedoch kein Fehler auftritt, ist der erste Parameter null, was bedeutet, dass Sie in diesem Fall versuchen, auf die Eigenschaft .code einer Nullvariable zuzugreifen.

Um dies zu verhindern, können Sie zunächst überprüfen, ob Fehler nicht null ist, durch dies zu tun:

family.save(function(err, newFamily) { 

    if (err) { 
     if(err.code == 11000) { 
      return res.json({ success: false, message: 'A user with that username already exists. '}); 
     } 
     else { 
      return res.send(err); 
     } 
    } 

    res.json({ message: 'Family created!', newFamily: newFamily }); 

}); 

Beachten Sie die Änderungen:

  • erste Zeile - I der den zweiten Parameter , die enthält die sichere Familie
  • zweite Zeile - die erste Bedingung überprüfen, ob err ist nicht null
  • letzte Zeile - ich habe die newFamily bei der Antwort, was eine gute Praxis ist. diese
+0

Ja, es funktioniert. Aber ich bekomme nicht die "Erfolgsmeldung" ("Familie erstellt") mit neuen Familiendetails. (db erstellt die neuen Daten) – user2024080

+0

@JohnnyHK hatte Recht. Bitte beachten Sie die aktualisierte jetzt, ich habe die Fehlerprüfung behoben. Jetzt könnte das funktionieren. – daymannovaes

0

schreiben in Ihrer Callback-Funktion

   if (err && err.code == 11000) { 
        return res.json({ success: false, message: 'A user with that username already exists. '}); 
       } 
       else if (err){ 
        res.send(err); 
       }else{ 

       res.json({ message: 'Family created!' });}