Kun*_*nal 2 mongoose node.js express es6-promise
我正在尝试将旧的 mongoose Promise 代码转换为 Native ES6 Promise。我收到了 catch 中抛出的所有错误,我可以将其记录在控制台中,但是当我尝试将其传递给响应对象时,我得到空对象。以下是我的代码
module.exports.login = function(req, res) {
var userPromise = User.findOne({email:req.body.email}).exec();
userPromise.then(function(user) {
if(!user){
throw new Error("step 1 failed!");
}
})
.then(function(user) {
if(!user.comparePassword(req.body.password)){
throw new Error("step 2 failed!");
}else {
return res.json({token: jwt.sign({email:user.email, name:user.name, _id: user._id}, 'SOMETOKEN')});
}
})
.catch(function(err) {
console.log('Error: '+err);
return res.status(401).send(err);
});
};
Run Code Online (Sandbox Code Playgroud)
请让我知道我是否走在正确的道路上或者我在这里犯了一些错误。提前致谢。
实例Error是一个对象,Express 将(据我所知)使用类似于以下的代码:
res.status(401).send(JSON.stringify(err))
Run Code Online (Sandbox Code Playgroud)
的结果JSON.stringify(err)是{}因为它的主要属性(name、message和stack)是不可枚举的。
我不确定您到底想返回给用户什么,但通常会发回message该对象的属性:
return res.status(401).send({ error : err.message });
Run Code Online (Sandbox Code Playgroud)
另外,你的第二个.then()是多余的,你可以将代码缩短为:
userPromise.then(function(user) {
if (! user) {
throw new Error("step 1 failed!");
}
if (! user.comparePassword(req.body.password)) {
throw new Error("step 2 failed!");
}
return res.json({token: jwt.sign({email:user.email, name:user.name, _id: user._id}, 'SOMETOKEN')});
}).catch(function(err) {
return res.status(401).send({ error : err.message });
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1530 次 |
| 最近记录: |