Mongoose – 函数内.find方法不传递结果

如何将函数的结果成功传递给.find方法? 如果用户提交了一个非空string,我希望通过body-parser传递的参数被用作键“name”的值。 如果用户提交了一个空string,那么空的对象应该被传递给.find方法。

函数console.log工作。 如果我提交一个空string,然后“空querydb”被打印到控制台。 同样,如果我提交任何其他string,然后正确地打印到控制台。

我如何将req.body.querydb作为值传递给'name'键?

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') } 

非常感谢 !

在mongoose中,您有两种可能性来查找请求

  • find(query, callback)函数
  • 查询生成器

我build议你使用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 pure find()函数一样工作,对我来说,这是发出请求的最好方法。

编辑:

build议最好的方式来控制传入的variables来执行这个查找。

例如,你可以这样做:

 let findQuery = {}; if (req.body.querydb) { findQuery.name = req.body.querydb } someModel.find(findQuery, function (err, users) { // ... }); 

我不是很确定你在找什么,但尽可能地理解我正在给一些代码。 这样你将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') } 

从我可以告诉你正在寻找将api的值传递给mongo查询。

在实际调用之外定义查询可能是有意义的,然后根据需要构build它,或者确保在进入查询之前传递一个值。

例如:

 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那么callback将在执行后被调用,并且查询是传递给.find函数的第一个参数。