【问题标题】:Cannot read property 'length' of undefined on one GET request无法在一个 GET 请求上读取未定义的属性“长度”
【发布时间】:2018-09-26 04:23:52
【问题描述】:

使用 MEAN Stack 时,我对同一个 URL/路由有三个 GET 请求。一种是对长期情绪进行概括总结,另一种是按输入的日期对情绪进行总结,最后是对与个人情绪条目相关的用户输入标签相关的情绪总结。

我的第一个 GET 请求没有引发任何问题,但第二个 GET 请求引发了错误:无法读取未定义的属性“长度”

错误指向以下行:

48| dateEmotions 中的每种情绪

以下是与错误相关的相关代码:

翡翠

each emotion in dateEmotions  
    .side-emotions-group
      .side-emotions-label
        p.emotion-left= emotion.emotionName
        p.pull-right(class= emotion.emotionLevel) (#{emotion.emotionLevel}%)
      .side-emotions-emotion.emotion-left

GET 请求

module.exports.emotionsListByDates = function (req, res) {
  Emo.aggregate([
    { $match :
        { "date" : { $gte: ISODate("2018-04-09T00:00:00.000Z"), $lt: ISODate("2018-04-13T00:00:00.000Z") } }
    }, { "$group": {
        "_id": null,
        "averageHappiness": {"$avg": "$happiness"},
        "averageSadness": {"$avg": "$sadness"},
        "averageAnger": {"$avg": "$anger"},
        "averageSurprise": {"$avg": "$surprise"},
        "averageContempt": {"$avg": "$contempt"},
        "averageDisgust": {"$avg": "$disgust"},
        "averageFear": {"$avg": "$fear"},
    }}
], function (e, docs) {
    if (e) {
        res.send(e);
    } else {
        res.render('dashboard', {
            title: "ReacTrack - User Dashboard",
            pageHeader: {
                title: "User Dashboard",
                strapline: "View your emotional data here."
            }, 
            dateEmotions: docs
        })
    }
  });
};

这个问题已经很长了,但是我有另一个指向该 URL 的 GET 请求,它没有抛出任何错误,唯一的区别是我没有在该查询中按日期匹配数据库记录。如果需要,我可以发布工作代码。

编辑

经过一些试验,如果我注释掉另外两条路线,我可以让这三条路线中的每一条都单独运行。当多个路由引入多个请求时会导致问题。比如下面是目前ctrlDashboard.emotionsListByDates工作的路由:

// Dashboard Routes
//router.get(/dashboard', ctrlDashboard.emotionsListGeneralised);
router.get('/dashboard', ctrlDashboard.emotionsListByDates);
//router.get('/dashboard', ctrlDashboard.emotionsListByTag);

如果我注释掉两条路线并让一条运行,并注释掉 Jade 文件中相应的 each emotion in emotions each emotion in dateEmotionseach emotion in tagEmotions 块,并且不注释正确的一条,那么这条路线将起作用,似乎是在我触发多条路线时。这是不好的做法,还是不正确的?如果在同一个 URL 上,所有查询都应该在一个 GET 请求中吗?

谢谢。

【问题讨论】:

  • 您可能没有与您的查询匹配的文档,因此dateEmotions 保持未定义。
  • 该查询在终端的 Mongo shell 中运行并输出正确的结果。
  • 虽然与错误无关,但我没有看到您从 mongo 查询中投射 emotion.emotionNameemotion.emotionLevel。你确定你指向的是正确的仪表板玉文件吗?
  • 哦,是的,那是在早期,当我在 app_server 文件夹中的另一个控制器中有一些虚拟数据时,上面的请求在 app_api 中。例如,将这些更改为emotion.averageHappiness 时,它仍然不起作用。
  • 经过一些故障排除和实验后更新了原始帖子。仍然面临问题,但这是一种新的问题。

标签: mongodb mongoose get mean-stack


【解决方案1】:

抱歉,路由和 RESTful API 的新手,但在对该主题进行了一些研究后,我现在明白了错误所在。

我假设路由中使用的 URL 是您希望数据填充的 URL……它仍然是,但我想如果我想填充仪表板页面,我必须使用那个确切的路由,我没有意识到我可以将数据发布到不同的 URL 路由并从这些 URL 中获取数据以填充一个页面。

已通过将 /date/tag 添加到这些路由并使用 AJAX 执行这些请求并填充主页来修复。

谢谢大家。

【讨论】:

    【解决方案2】:

    我有同样的问题,但我使用的是 React+Redux+Fetch。那么,在同一时间从同一页面向特定 URL 发送多个请求不是一个好习惯吗?

    我会知道是什么导致了这个问题。我发现一些关于它的讨论可能是一个猫鼬问题。

    我的代码:

    MymongooObject.find(query_specifiers, function(err, data) { 
      for (let i = 0; i < data.length; ++i) {
      ...
     }
    }
    

    错误:

    TypeError: 无法读取未定义的属性“长度”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 2022-06-15
      • 2021-12-09
      相关资源
      最近更新 更多