2016-09-10 3 views
0

В моем приложении я использую mongoose для подключения с mlab для размещения данных. когда я использую почтальона для проверки публикации, я получаю данные, обновленные в базе данных. но консоль вызывает эту ошибку:Ошибка Mongoose throw - как это исправить?

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) 

Я вообще не понимаю эту ошибку. Как это исправить? И что здесь не так с моим кодом?

Для справки здесь мой post апи, который я использую:

.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!' }); 

       }); 



      }) 

ответ

2

Поскольку каждый узел обратного вызова есть эта подпись callback(error, response),

это означает, что если происходит ошибка, то первый параметр будет содержать ошибка, а вторая будет нулевой. Но если ошибка не возникает, первый параметр будет иметь значение null, что означает, что в этом случае вы пытаетесь получить доступ к свойству .code нулевой переменной.

Чтобы предотвратить это, вы можете сначала проверить, если ошибка не равно нулю, при этом:

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 }); 

}); 

Обратите внимание на изменения:

  • первой линии - я включил второй параметр , который содержит группу спасения
  • вторая строка - первое условие проверки, если err не является нулевым
  • последняя строка - я включил newFamily в ответ, который является хорошей практикой.
+0

Да, это работает. Но я не получаю сообщение «success» («Family created») с новыми сведениями о семье. (db создает новые данные) – user2024080

+0

@JohnnyHK был прав. Пожалуйста, просмотрите обновление сейчас, я исправил ошибку. Теперь это может сработать. – daymannovaes

0

написать в функции обратного вызова

   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!' });} 
Смежные вопросы