我已经从github下载了这个项目,但是在运行时出现了这个错误。似乎错误在于从数据库检索评论。 该项目后端在nodejs中完成,而前端在angularjs中完成。 我已经发布了一些可能会发生此错误和错误控制台的代码。 请帮助我解决这个问题。 提前非常感谢您。
Preview.js
exports.getRentalRating = function(req, res) {
const rentalId = req.params.id;
Review.aggregate([
{"$unwind": "$rental"},
{"$group": {
"_id": rentalId,
"ratingAvg": {"$avg": "$rating"}
}}], function (err, result) {
if (err) {
return res.status(422).send({errors: normalizeErrors(err.errors)});
}
return res.json(result[0]['ratingAvg'])
})
}
控制台错误
App is running!
events.js:167
throw er; // Unhandled 'error' event
^
TypeError: Cannot read property 'ratingAvg' of undefined
at E:\bwm-ng\server\controllers\review.js:94:32
at E:\bwm-ng\node_modules\mongoose\lib\model.js:3954:16
at model.hooks.execPost (E:\bwm-ng\node_modules\mongoose\lib\aggregate.js:811:13)
at E:\bwm-ng\node_modules\kareem\index.js:135:16
at process._tickCallback (internal/process/next_tick.js:61:11)
Emitted 'error' event at:
[nodemon] app crashed - waiting for file changes before starting...
答案 0 :(得分:0)
您正在尝试返回结果中不存在的文档属性。似乎您在result
中没有任何数据,或者该数据不在您期望的结构中,并试图访问其中的项目。
请先添加console.log(result);
,然后再尝试返回数据。这样我们就可以查看您拥有的数据(如果有)。
根据以下内容进行更改:
Review.aggregate([
{"$unwind": "$rental"},
{"$group": {
"_id": rentalId,
"ratingAvg": {"$avg": "$rating"}
}}], function (err, result) {
if (err) {
return res.status(422).send({errors: normalizeErrors(err.errors)});
}
console.log(result);
// check you have data before you attempt to access properties on it
if(result && result.length > 0) {
return res.json(result[0]['ratingAvg'])
}
// return a empty result etc
return res.json({});
})