将Mongoose用作NodeJS的ODM,但不能完全理解错误处理的工作原理。它可以工作,但是看起来不正确,并且与文档不符,所以我担心走这条路以后会困扰我。
例如,这是基本的登录途径:
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
}
}
在今天之前还没有真正使用过Mongo,但这感觉上有很多条件错误处理。这里有我不正确理解的东西吗?
最佳答案
本来打算发表评论,但将其粘贴为答案更容易。
由于可以在每个条件的末尾返回,因此可以简化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]
});
});
});