我正在使用Mongodb和findOne功能:
User.findOne({$or: [{email: req.body.email}, {mobile: req.body.mobile}]}
但是,我面临的问题是req.body.email
和req.body.mobile
- 在某些情况下可能为空。
我最初使用以下方法解决了这个问题:
var toSearchSmartString = {$or: [{email: req.body.email}, {mobile: req.body.mobile}]};
if (req.body.email.length == 0) {
toSearchSmartString = {mobile: req.body.mobile};
} else if (req.body.mobile.length == 0) {
toSearchSmartString = {email: req.body.email};
}
然后在findOne中,只需使用:
User.findOne(toSearchSmartString);
所以我想检查一下这个'安全'的待办事项吗?我问的原因是这是安全的,因为如果我没有设置toSearchSmartString的默认值,而是将其设置在if块的末尾(在else中),我会得到'undefined'字符串。
我担心在检查if else条件之前,findOne方法可能会使用默认的toSearchSmartString吗?我是否对此感到担忧?
或者是否有一些我可以用来解决的Mongodb函数?
更新: 所以在回答下面的评论之后 - 代码有问题:
我通过将上面的var声明移动到其使用的位置来解决它。
var contWithRegCallback = function(err, user) {
console.log(user);
}
if (req.body.email.length == 0) {
User.findOne({mobile: req.body.mobile}, contWithRegCallback);
} else if (req.body.mobile.length == 0) {
User.findOne({email: req.body.email}, contWithRegCallback);
} else {
User.findOne({$or: [{email: req.body.email}, {mobile: req.body.mobile}]}, contWithRegCallback);
}
即回调函数中的用户继续返回undefined。不应该是fineOne的内容吗?
答案 0 :(得分:4)
为什么不使用条件检查? 这个简单的代码段应该按预期工作,请注意,您希望通过电子邮件或移动过滤。
var callback = function(err, result){
if(err) {
return res.status(400).send({message: 'Server error:' + JSON.stringify(err)});
} else {
res.json(result);
}
}
if (req.body.email){
User.findOne({email: req.body.email}, callback);
} else if (req.body.mobile) {
User.findOne({mobile: req.body.mobile}, callback);
} else {
return res.status(400).send({message: "Email or Mobile required"});
}