Node.js Mongoose-函数内部。find方法不传递结果

Node.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 非常感谢 我不确定您在寻找什么,但为了尽可能多地理解,我给出了一些

如何将函数的结果成功传递到.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 pure
find()
函数类似,对我来说,这是发出请求的最佳方式

编辑:

建议以执行此查找的最佳方式控制传入变量

例如,您可以这样做:

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