我正在使用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块的末尾(否则)设置它,则该字符串为'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);
}
即,回调函数中的用户不断返回未定义状态。它不应该是fineOne的内容吗?
您为什么不只使用条件检查?请注意,您希望通过电子邮件或移动设备进行过滤,此简单的代码段应能按预期工作。
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"});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句