Javascript Node.js模块错误处理
上周我一直在努力处理错误,特别是Node.js模块中的错误处理。首先,这是我的代码: user.js路由 user.js模块 每当user.js模块内部出现错误时,调用回调函数,处理user.js路由内部的错误。这是可行的,但我模块中的混乱看起来并不好,因为有太多if-else语句Javascript Node.js模块错误处理,javascript,node.js,Javascript,Node.js,上周我一直在努力处理错误,特别是Node.js模块中的错误处理。首先,这是我的代码: user.js路由 user.js模块 每当user.js模块内部出现错误时,调用回调函数,处理user.js路由内部的错误。这是可行的,但我模块中的混乱看起来并不好,因为有太多if-else语句 是否有更好的方法,还是每次都要检查是否有错误?您可以将代码简化为: module.exports.addUser = function(newUser, cb) { User.findOne({ email: n
是否有更好的方法,还是每次都要检查是否有错误?您可以将代码简化为:
module.exports.addUser = function(newUser, cb) {
User.findOne({ email: newUser.email }, function(err, user) {
if(err) {
cb(err);
return;
}
if(user) {
cb(null, user);
return ;
}
bcrypt.genSalt(10, function(err, salt) {
if(err) {
cb(err);
return;
}
bcrypt.hash(newUser.password, salt, function(err, hash) {
if(err) {
cb(err)
return;
}
newUser.password = hash;
newUser.save(function(err, newUser) {
if(err) {
cb(err);
return;
}
cb(null, false);
});
});
});
});
}
然而,如果我是你,正如@scimonester在他的评论中所说的,这是一个典型的用例,它允许您编写更可读的代码,并避免您可以尝试使用承诺来简化错误处理。
module.exports.addUser = function(newUser, cb) {
User.findOne({ email: newUser.email }, function(err, user) {
if(err) {
cb(err);
} else if(user) {
cb(null, user);
} else {
bcrypt.genSalt(10, function(err, salt) {
if(err) {
cb(err);
} else {
bcrypt.hash(newUser.password, salt, function(err, hash) {
if(err) {
cb(err)
} else {
newUser.password = hash;
newUser.save(function(err, newUser) {
if(err) {
cb(err);
} else {
cb(null, false);
}
});
}
});
}
});
}
});
}
module.exports.addUser = function(newUser, cb) {
User.findOne({ email: newUser.email }, function(err, user) {
if(err) {
cb(err);
return;
}
if(user) {
cb(null, user);
return ;
}
bcrypt.genSalt(10, function(err, salt) {
if(err) {
cb(err);
return;
}
bcrypt.hash(newUser.password, salt, function(err, hash) {
if(err) {
cb(err)
return;
}
newUser.password = hash;
newUser.save(function(err, newUser) {
if(err) {
cb(err);
return;
}
cb(null, false);
});
});
});
});
}