繁体   English   中英

猫鼬:正确获取查询结果

[英]Mongoose: properly getting the query result

你好吗? 我对mongoose和mongoDB相当陌生,在进行基本查询时遇到了麻烦。 所以,我有这段代码:

function addVoterToElection(req, res) {
    let query = Election.findOne({ 'name' : req.body.electionName });
    let result = query.exec((err, election) => {
        if(err) return err;
        return res.send(election);
    });
}

这可以按预期工作,因为t将我需要的选举发送回了请求者:

{
    "_id": "594408b7c94fcdc009000001",
    "votechain": "594408b7c94fcdc009000002",
    "name": "eleicaoteste",
    "electionID": 12,
    "__v": 0,
    "voters": null
}

但是,问题是我需要将该对象用于其他目的,并且在从query.exec中“提取”该对象时遇到了麻烦。 如果我做

let query = Election.findOne({ 'name' : req.body.electionName });
let result = query.exec((err, election) => {
    if(err) return err;
    return (election);
});
res.json(result);

我回来的就是

{
    "emitted": {},
    "ended": false,
    "_events": {},
    "_eventsCount": 2
}

因此,我无法将其用于依赖于使该选举对象正常工作的下一个查询。 我能做什么? 我知道这是一个非常基本的问题,但是我不确定我是否了解整个承诺的工作原理。 非常感谢!

问题在于您没有使用promise权利。

这是开始学习Promises的好地方:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise

解决方案非常简单:

let query = Election.findOne({ 'name' : req.body.electionName });
let result = query.exec();

result.then((result) => {
    res.json(result);
}).catch((error) => {
    // console.log(err);
});

http://mongoosejs.com/docs/promises.html

let query = Election.findOne({ 'name' : req.body.electionName });

let result = query.exec((err, election) => {
    if(err) return err;
    return (election);
});

res.json(result);

查询异步运行(在后台),而其余代码则执行。 执行完查询后,它将执行需要err和选举的回调。 当您返回结果时,它尚未完成执行,因此是您的问题。

您可以做的是将res.json移到回调的主体中,如下所示:

let query = Election.findOne({ 'name' : req.body.electionName });

query.exec((err, election) => {
    if(err) return err;
        res.json(election);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM