Nodejs - 无法读取未定义的属性

时间:2018-04-01 19:29:14

标签: node.js

执行以下代码时出现此错误:

getAggregatedRatings(query).then(ratings=>{
    if(ratings){
        return res.json(ratings);
    }else{
        return res.send(200);
    }        
}).catch((error)=>{
    return res.send(500); 
});

function getAggregatedRatings(query){
    movieRating.aggregate(query)
    .exec((err, ratings)=> {
        if (err || !ratings) {
            return Promise.reject(err);
        }
        else {
            return Promise.resolve(ratings);
        }
    });
}

请注意'getAggregatedRatings'会按预期返回查询结果。 请告诉我我做错了什么。

2 个答案:

答案 0 :(得分:3)

您的getAggregatedRatings函数未返回承诺或其他任何内容,这解释了为什么在尝试访问它时,结果未定义。

尝试将其更改为:

function getAggregatedRatings(query){
    return new Promise((resolve, reject) => {
        movieRating.aggregate(query)
        .exec((err, ratings)=> {
            if (err || !ratings) {
                reject(err);
            }
            else {
                resolve(ratings);
            }
        });
    })
}

答案 1 :(得分:0)

您可能正在使用mongoose进行此查询。如果您使用的是最新版本的mongoose,那么.exec()已经返回了一个承诺,因此您可以避免在手动创建的新承诺中包含一个承诺的promise anti-pattern,而您可以只使用承诺它已经回归:

function getAggregatedRatings(query){
    return movieRating.aggregate(query).exec().then(result => {
        if (!result) {
            throw new Error("no results found");
        }
    });
}