gpt4 book ai didi

javascript - Mongodb findOne 但首先检查请求是否为空

转载 作者:可可西里 更新时间:2023-11-01 10:00:31 24 4
gpt4 key购买 nike

我正在使用 Mongodb 和 findOne 功能:

User.findOne({$or: [{email: req.body.email}, {mobile: req.body.mobile}]}

但是我面临的问题是 req.body.emailreq.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 block 的末尾(在 else 中),我会得到该字符串的“未定义”。

我担心 findOne 方法可能会在检查 if else 条件之前使用默认的 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的内容吗?

最佳答案

为什么不使用条件检查呢?这个简单的代码片段应该会按预期工作,请注意,您要通过电子邮件手机进行过滤。

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"});
}

关于javascript - Mongodb findOne 但首先检查请求是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35380428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com