TypeError:无法读取nodejs中未定义的属性“ ratingAvg”

时间:2019-11-18 19:00:20

标签: javascript node.js

我已经从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...

1 个答案:

答案 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({});
    })