我的用户集合有一个用户,它是非活动的,但是当我查询以找出存在和活动的用户时,我正在使用带有承诺的猫鼬 4.x(见下面的查询(,它总是转到.then
块并显示空白数组,但据我了解,它必须转到.catch()
块。
请纠正我并建议如何编写正确的查询。
图式
let userSchema = new Schema({
username: {type: String, required: true, unique: true},
password: {type: String, required: true},
firstName: {type: String, required: true},
lastName: {type: String},
email: {type: String, required: true},
gender: {type: String, enum: ['M','F'], default: 'M'},
passwordReset: {type: Boolean, default: false},
isActive: {type: Boolean, default: false},
createdOn: {type: Date, default: Date.now}
});
查询
User
.find()
.and([{username: req.body.username}, {isActive: true}])
.exec()
.then( (user) => {
console.log('user found', user );
// match saved and input password
if (user.password === req.body.password) {
res.status(200).json(user);
} else {
console.log('else part', user);
res.status(404).send({
"message": "invalid credentials."
});
}
}).catch( (err) => {
console.log('catch error', err);
res.status(404).send(err);
});
}
当有效查询未产生任何结果时,这不是错误,因此不会引发错误。错误仅在实际错误条件下引发,例如无效查询、连接问题等。
处理此问题的正确方法是检查查询是否生成了结果:
User.findOne({ username: req.body.username, isActive: true }).then(user => {
if (! user) {
return res.status(404).send({ message: "user not found." });
}
...
}).catch(err => {
console.log('catch error', err);
res.status(500).send(err);
});