2016-02-05 74 views
0

將Mongoose作爲ODM與NodeJS一起使用,但沒有完全理解錯誤處理的工作方式。它有效,但看起來不正確,並且與文檔不符,所以我擔心這條路走下去會困擾我。MongooseJS的意外結果findOne()

例如,這裏有一個基本的登入路線:

app.post('/signin', function(req, res){ 
    var email = req.body.email; 
    var password = req.body.password; 
    mongoose.model('User').findOne({ 
     email: email, 
     password: password 
    }, function(err, user){ 
     if (err){ 
      console.log('Database Error') 
      return res.json({error: 'Database Error'}) 
     } else { 
      if (!user) { 
       console.log('User not found.'); 
       return res.json({error: 'Email and/or password incorrect.'}) 
      } else { 
       console.log('User ' + user.email + ' found. Logging in.'); 
       res.json({ 
       token: jwt.sign({}, 'top-secret', {subject: user}), 
       data: data[user] 
       }) 
      } 
     } 
    }) 
}) 

我對此特別擔心:

if (err) { 
    //do something 
} else { 
    if (!user){ 
     //do something else 
    } else { 
     //log the user in 
    } 
} 

還沒有真正使用蒙戈在今天之前,但這種感覺就像很多的條件錯誤處理。有什麼我在這裏沒有正確理解?

+1

對我來說這看起來很好。 – Molda

回答

1

正想發佈的評論,但它更容易粘貼此作爲一個答案..

可以簡化的if-else嵌套,因爲你在每個有條件的端返回,就像這樣:

app.post('/signin', function (req, res) { 

    var email = req.body.email; 
    var password = req.body.password; 

    mongoose.model('User').findOne({ 
     email: email, 
     password: password 
    }, function (err, user) { 

     if (err) { 
      console.log('Database Error'); 
      return res.json({error: 'Database Error'}); 
     } 
     if (!user) { 
      console.log('User not found.'); 
      return res.json({error: 'Email and/or password incorrect.'}); 
     } 
     console.log('User ' + user.email + ' found. Logging in.'); 
     res.json({ 
      token: jwt.sign({}, 'top-secret', {subject: user}), 
      data: data[user] 
     }); 
    }); 
}); 
+0

謝謝是的。這簡化了一下。我想我被貓鼬的文檔拋棄了,似乎沒有那個條件層。 http://mongoosejs.com/docs/api.html#query_Query-findOne – jmknoll