Mongodb 未处理承诺拒绝警告
我创建了此函数,但收到了Mongodb 未处理承诺拒绝警告,mongodb,express,mongoose,promise,Mongodb,Express,Mongoose,Promise,我创建了此函数,但收到了未处理的拒绝承诺警告。 尝试过重构,但不知何故我做得不对 router.post('/authenticate', function (req, res) { User.findOne({username: req.body.username}) .select('username password') .exec(function (err, user) { if (err) throw err; if (!user)
未处理的拒绝承诺警告
。
尝试过重构,但不知何故我做得不对
router.post('/authenticate', function (req, res) {
User.findOne({username: req.body.username})
.select('username password')
.exec(function (err, user) {
if (err) throw err;
if (!user) {
res.json({success: false, message: 'Could not authenticate user'});
} else if (user) {
if (req.body.password) {
var validPassword = user.comparePassword(req.body.password);
}
else {
res.status(200).json({success: false, message: 'Please provide password'})
}
if (!validPassword) {
res.status(500).json({success: false, message: 'Could not authenticate password'});
} else {
var token = jwt.sign({username: user.username, email: user.email}, secret, {expiresIn: '24h'});
res.json({success: true, message: 'User authenticated', token: token});
}
}
});
});
你能告诉我我应该如何重构它使它工作吗?
提前谢谢 有两种解决方案可帮助您进行调试: 首先,设置一个promise库,使您能够捕获错误 现在您可以执行以下操作:
User.findOne({username:req.body.username})
.选择('用户名密码')
.exec((用户)=>{
//做事
})
.catch((错误)=>{
//错误,现在处理!
})
要想知道错误是什么,你可以这样做,但我记得在某个地方读到,这被认为不是最佳实践。我过去用过它,看看我的错误是从哪里来的
process.on('unhandledRejection',错误=>{
日志('unhandledRejection',error.message);
});
我也遇到了同样的问题,我只是简单地添加了一个包含“usePushEach:true”的设置对象就解决了这个问题
if(err)抛出err
看起来绝对不正确仅供参考,您的代码有一个路径,可以同时调用res.status(200).json(…)
和res.statu(500).json(…)
,这是不正确的。另外,if(!user){}else if(user){}
只能是if(!user){}else{}
。根据定义,如果您访问else
,则有一个user
值。
new mongoose.Schema({
username: String
}, {
usePushEach: true
});