如何成功地将函数的结果传递到.find方法中?如果用户提交了非空字符串,我希望通过Body-Parser通过Body-Parser传递的参数可以用作密钥"名称"的值。如果用户提交了一个空字符串,则应将空对象传递到.find方法中。
功能console.log工作。如果我提交一个空字符串,则将"空QueryDB"打印到控制台。同样,如果我提交任何其他字符串,则将其正确打印到控制台上。
如何将req.body.querydb作为"名称"键的值传递?
html
<form method="POST" action="form_query">
<input type="textarea" name="querydb">
<br><br>
<button> Query </button>
</form>
.js
router.post('/form_query', function(req,res) {
someModel.find(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(query, callback)
功能 - 查询构建器
我建议您使用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纯find()
功能,对我而言,这是提出您的请求的最佳方法。
编辑:
建议以最佳方法来控制传入变量。
例如,您可以做到这一点:
let findQuery = {};
if (req.body.querydb) {
findQuery.name = req.body.querydb
}
someModel.find(findQuery, function (err, users) {
// ...
});
我不太确定您在寻找什么,但试图尽可能多地了解一些代码。这样,您将req.body.querydb作为"名称"键的值。
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')
}
我能告诉您要将值从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函数的参数。