无法读取属性'长度'在一个GET请求中未定义

时间:2018-04-16 12:16:26

标签: mongodb mongoose get mean-stack

使用MEAN Stack,我对同一个URL / Route有三个GET请求。一个是获得长期情绪的概括性总结,另一个是通过输入的日期得出情绪摘要,最后是与用户输入的与个体情绪条目相关联的标签相关的情绪摘要。

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

错误指向以下行:

  

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

获取请求

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
        })
    }
  });
};

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

修改

经过一些实验,如果我注释掉其他两条路线,我可以让三条路线中的每条路线单独工作。当多个路由引入导致问题的多个请求时。例如,以下是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请求中吗?

感谢。

2 个答案:

答案 0 :(得分:0)

道歉,路由和RESTful API的新手,但经过一些研究,我现在明白了这个错误。

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

通过向这些路由添加List<T>IEnumerable<T>并使用AJAX执行这些请求并填充主页来解决此问题。

谢谢大家。

答案 1 :(得分:0)

我有同样的问题,但是我使用的是React + Redux + Fetch。因此,在同一时间从同一页面向一个特定的URL分派一个以上的请求不是一种好习惯吗?

我知道是什么原因导致了这个问题。我发现有关它的讨论可能是猫鼬问题。

我的代码:

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

错误:

  

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