Node.js Mongoose-函数内部。find方法不传递结果
如何将函数的结果成功传递到.find方法?如果用户提交了非空字符串,我希望通过主体解析器传递的参数用作键“name”的值。若用户提交了一个空字符串,那个么空对象应该被传递到.find方法中 函数console.log起作用。如果我提交一个空字符串,那么“empty querydb”将打印到控制台。同样,如果我提交任何其他字符串,那么它将正确地打印到控制台 如何将req.body.querydb作为值传递给'name'键 HTMLNode.js Mongoose-函数内部。find方法不传递结果,node.js,mongodb,express,mongoose,body-parser,Node.js,Mongodb,Express,Mongoose,Body Parser,如何将函数的结果成功传递到.find方法?如果用户提交了非空字符串,我希望通过主体解析器传递的参数用作键“name”的值。若用户提交了一个空字符串,那个么空对象应该被传递到.find方法中 函数console.log起作用。如果我提交一个空字符串,那么“empty querydb”将打印到控制台。同样,如果我提交任何其他字符串,那么它将正确地打印到控制台 如何将req.body.querydb作为值传递给'name'键 HTML 非常感谢 我不确定您在寻找什么,但为了尽可能多地理解,我给出了一些
非常感谢 我不确定您在寻找什么,但为了尽可能多地理解,我给出了一些代码。通过这种方式,可以将req.body.querydb作为值传递给“name”键
router.post('/form_query', function(req,res) {
someModel.find({name:req.body.querydb},function(err,results){
if(!req.body.querydb){
console.log("empty querydb")
return {}
} else {
console.log(req.body.querydb)
return {name:req.body.querydb}
}
}).exec(function(err, result) {
if (err) {
send(err)
} else {
console.log('omg')
}
在猫鼬中,有两种可能发出查找请求
函数find(查询、回调)
- 查询生成器
find()
函数。在您的情况下,您的代码更像这样:
router.post('/form_query', function(req,res, next) {
someModel.find({
name : req.body.querydb
}, function (err, users) {
if (err) {
// request has an error like connection problem
res({ error : err });
return;
}
// request works correctly, you can send the users array for example
res(users);
});
});
find
函数的工作原理与mongodb purefind()
函数类似,对我来说,这是发出请求的最佳方式
编辑:
建议以执行此查找的最佳方式控制传入变量
例如,您可以这样做:
let findQuery = {};
if (req.body.querydb) {
findQuery.name = req.body.querydb
}
someModel.find(findQuery, function (err, users) {
// ...
});
据我所知,您希望将一个值从api传递到mongo查询中 在实际调用之外定义查询,然后根据需要构建查询,或者确保在进入查询之前传递值,这可能是有意义的 例如:
router.post('/form_query', function(req,res) {
if(!req.body.querydb) {
return res.status(404).send("empty querydb");
}
// validate querydb param
someModel.find({ name: req.body.querydb }, function(err,results){
if(!req.body.querydb){
console.log("empty querydb")
res.send
} else {
console.log(req.body.querydb)
return res.status(200).send(results);
}
})
});
如果您使用的是mongoose,则在执行后将调用回调,并且查询是传递到.find函数的第一个参数。这里的想法是正确的,但我会首先检查输入,以确保它在查询之前存在,以避免错误,如果系统有任何限制,可能会验证它,以确保它不会返回超出其应返回的值,例如req.body.querydb={$exists:true}将返回系统中可能无法接受的名称的所有数据“。但是在您的情况下,我建议在
find()
之前测试并修改参数。谢谢您的回复,很抱歉回来晚了。我不确定这是否是我想要的,或者我还没有很好地阐述它。italic“如果用户提交了一个空字符串,那么应该将空对象传递给.find方法。”我之所以执行“If”语句,是因为.find({name:req.body.name})在用户提交空表单时返回0个结果。相反,我希望API返回结果,就像执行了.find({})并返回了在someModel中定义的整个集合一样。请让我知道如果清楚。不确定是否编辑第一篇文章(?)
let findQuery = {};
if (req.body.querydb) {
findQuery.name = req.body.querydb
}
someModel.find(findQuery, function (err, users) {
// ...
});
router.post('/form_query', function(req,res) {
if(!req.body.querydb) {
return res.status(404).send("empty querydb");
}
// validate querydb param
someModel.find({ name: req.body.querydb }, function(err,results){
if(!req.body.querydb){
console.log("empty querydb")
res.send
} else {
console.log(req.body.querydb)
return res.status(200).send(results);
}
})
});