考虑以下 Node.js Express 路由:
router.route('/user')
.post(async function(req, res) {
if(req.body.password === req.body.passwordConfirm) {
try {
var response = await userManager.addUser(req.body);
res.status(201).send();
} catch(err) {
logger.error('POST /user failed with error: '+err);
res.status(500).send({err:"something went wrong.."});
}
} else {
res.status(400).send({err:'passwords do not match'});
}
})
以及userManager中对应的功能:
var userManager = function() {
this.addUser = async function(userobject) {
userobject.password_hash = await genHash(userobject.password_hash);
var user = new User(userobject);
return await user.save();
};
};
module.exports = userManager;
我可以安全地假设,如果catch块中的代码没有运行,那么就没有错误吗?由于
userManager.addUser
及其内部的所有内容都返回promise,这些promise如果被拒绝,应该被catch块捕获。
或者我漏掉了什么,还是应该检查响应的有效性?
response
变量中得到了某些内容,这意味着目前还没有错误。但是,例如res.status(201).send();
仍然可能会抛出一些错误(在您的情况下它将是正常的,但让我们假设您在try
块中有更多代码)。 - Jakenull
或undefined
。 - Jakenull
或undefined
并不是错误,除非你当然会throw null
或reject(null)
。 - jib