2012-12-27 36 views
0

我有一條非常基本的POST路由,可以從給定數據中創建一個新用戶。如何在Express中失敗的Mongoose驗證後向客戶端返回錯誤消息

這裏是我如何保存:

app.post('/create', function(req, res){ 
    var firstUser = new models.User(req.body); 
    firstUser.save(); 
}); 

我的貓鼬用戶架構有幾個驗證選項,它的工作。如果我傳遞了錯誤的數據,則驗證失敗並且不會創建用戶。

但存在一個問題:Mongoose的save()函數是異步的,那麼現在如何讓客戶端的驗證失敗?

後期功能將在那時完成。

回答

4

你應該看看Mongoose documentation。由於save方法是異步的,因此需要使用回調作爲參數。這是你應該檢查錯誤的地方。

app.post('/create', function(req, res){ 
    var firstUser = new models.User(req.body); 
    firstUser.save(function (err) { 
     if (err) { 
      res.send(500, { error: 'Saving first user failed!' }); 
     } else { 
      res.send({ success: 'Saved!' }); 
     } 
    }) 
}); 
+0

啊,我以爲一旦post()函數完成,你就無法再向客戶端發送任何東西了。 – skerit

+0

實際上,這是對res.end()函數的調用。 res.send()在響應中添加一些內容,然後調用這個函數。 – Frank

+2

最好使用next來處理錯誤,因爲這就是它的原因。它還會將所有錯誤處理放在一箇中間件處理程序中,而不是在整個項目中重複自己。 – Pickels

相關問題