如何从mongoose查询中捕获错误。在我的路线中我得到了这样的东西:
// router.js
router.route('/signup')
.post(function(req, res) {
var profile = new Profile(); // create a new instance of the profile model
profile.username = req.body.username;
profile.password = profile.generateHash(req.body.password);
profile.save(function(err) {
if (err) { // (A)
throw new Error('user/create error'));
} else {
res.json(200, { user_token: profile._id, username: profile.username });
}
});
});
在我的应用程序中,我设置了我的路线:
// app.js
var router = require('./app/routes/routes');
// global-error handling middleware
app.use(function(err, req, res, next) {
console.log('Some error is happening.');
res.json(500, {status: 500, message: err.message});
});
如果我生成错误,那么我在上面的代码中找到//(A)行,我得到一个堆栈跟踪并且node.js存在。我想在我的错误处理程序中捕获错误。我该怎么做?
答案 0 :(得分:1)
嗯,您已经在请求处理程序中,并且您已经可以访问保存配置文件对象时产生的错误。所以,没有必要在这里抛出异常。您可以已经处理问题。
此处最可能的情况是向用户发送回复,指示保存配置文件失败。
function(req, res) {
profile.save(function(err) {
if (err) { // (A)
res.send(500, {message: 'Failed to save profile'}
} else {
res.json(200, { user_token: profile._id, username: profile.username });
}
});
}
就是这样。您的客户端将收到500状态错误,这显然表示您的客户需要处理的问题,例如通知用户,进行重试等等。
答案 1 :(得分:0)
您可以使用类似Promise的错误处理。猫鼬允许在其方法上使用promise:
profile.save().then((doc) => {
// if done correctly
}).catch((err) => {
// catch error if occurs
// handle error
});