mongoose-函数内部.输入方法不会通过结果



如何成功地将函数的结果传递到.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函数的参数。

最新更新