'空'传入Mongoose查询' findOne()'

时间:2017-04-19 19:46:11

标签: javascript node.js mongodb express mongoose

我遇到了一个过去几个小时似乎无法解决的问题。让我们来看看吧。

目前使用最新版本的express和mongoose

我在route.js中有以下路径查询:

Note
    .findOne({"user": req.body.user, "title": req.body.title, "subtitle": 
     req.body.subtitle})
    .exec(function (err, note) {
       if (err) {handleError(err)};
       console.log(note._id);
    })
    //same implementation as the in the mongoose docs

然后,我有一个客户端脚本,其中包含以下ajax请求:

let settings = {
        type: 'GET',
        url: 'http://localhost:8080/note',
        data: {
            "user": userId,
            "title": noteTitle,
            "subtitle": noteSubtitle
        },
        dataType: "json",
        success: renderGetNoteTemplate
    }
    return $.ajax(settings);

现在的问题是,即使数据库和正确集合中存在文档,查询结果也为空。经过几个小时阅读本网站上的线程并登录到控制台后,我决定将查询记录到控制台并看到了这个!

_conditions: { subtitle: null, title: null, user: null }

因此传递的条件为null,显然将返回null。现在,这是捕获。查询适用于以下条件:

Note.findById(req.cookies.note).exec()

我能看到的差异是,请求不是来自身体。所以上面我通过ajax请求发送了条件,如

{"title": req.body.title}

最后,当我只是将req.body.title等打印到控制台而不将其传递给查询时,值就出现了。例如,我将Romeo And Juliet作为noteTitle传递,当我在服务器控制台上打印时,我得到了Romeo And Juliet的值。一旦我将其作为问题出现的条件传递给查询,它就会立即生效。

实际上到处都是,特别是我命名模型的方式等等。再次当我将req.body参数传递给条件时,我得到null结果。

同样为了简洁起见,我没有在代码中包含我需要bodyParser的内容,所以当值不进入查询条件时,值会显示出来。

是什么让这些参数变成空的想法?

由于

1 个答案:

答案 0 :(得分:1)

应该是if (stat.count !== null) { validStats.push(((stat: Object): StatWithCount)) } 而不是req.queryreq.body,因为它是req.params请求。

GET

https://expressjs.com/en/api.html#req.query