【发布时间】:2017-11-02 02:17:25
【问题描述】:
给定以下 Node.js 快速路由:
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,如果被拒绝,应该被catch 块捕获。
还是我错过了什么,我还应该检查回复的有效性吗?
【问题讨论】:
-
如果你在你的
response变量中得到了一些东西,这意味着没有错误还。但是,例如res.status(201).send();仍然可以抛出一些(在您的情况下会很好,但假设您在try块中有更多代码)。 -
明确一点:我所说的“某事”是指任何事,甚至是
null或undefined。 -
在这种情况下 Model.save() (mongoose) 返回一个承诺,因此它永远不会为空或未定义。所以在这种情况下,我会像你说的那样。
-
null或undefined不是错误,除非您当然是throw null或reject(null)。
标签: node.js express promise async-await