【问题标题】:Failure jade with json - Cannot read property 'length' of undefined - I can't find what's wrongjson 失败的玉 - 无法读取未定义的属性“长度” - 我找不到问题所在
【发布时间】:2015-04-26 07:56:09
【问题描述】:

我正在开发一个项目,包括 Node.js、express 模块、jade 文件、MongoDB-Mongoose 等等。 我在实现从数据库到玉页面的 json 详细信息时遇到问题。

我试图找出问题所在,但没有成功。 我希望有人帮我找到并修复它。 谢谢。

这是错误信息:

TypeError: /Users/itzhak/Desktop/Development/Porvivo/AWSporvivo/views/index.jade:66
   64|   div(id="archive-rooms-container" class="row panel thumbnail-row")
   65|     h4= 'Musical Projects'
 > 66|     each project, index in projects
   67|           div(class='col-md-3 rowSpace')
   68|               ul(class="room-details")
   69|                   li

Cannot read property 'length' of undefined
   at jade_debug.unshift.lineno (eval at <anonymous> (/Users/itzhak/Desktop/Development/Porvivo/AWSporvivo/node_modules/jade/lib/jade.js:174:8), <anonymous>:618:31)
   at eval (eval at <anonymous> (/Users/itzhak/Desktop/Development/Porvivo/AWSporvivo/node_modules/jade/lib/jade.js:174:8), <anonymous>:815:4)
   at eval (eval at <anonymous> (/Users/itzhak/Desktop/Development/Porvivo/AWSporvivo/node_modules/jade/lib/jade.js:174:8), <anonymous>:955:22)
   at res (/Users/itzhak/Desktop/Development/Porvivo/AWSporvivo/node_modules/jade/lib/jade.js:175:38)
   at Object.exports.render (/Users/itzhak/Desktop/Development/Porvivo/AWSporvivo/node_modules/jade/lib/jade.js:300:10)
   at Object.exports.renderFile (/Users/itzhak/Desktop/Development/Porvivo/AWSporvivo/node_modules/jade/lib/jade.js:336:18)
   at View.exports.renderFile [as engine] (/Users/itzhak/Desktop/Development/Porvivo/AWSporvivo/node_modules/jade/lib/jade.js:321:21)
   at View.render (/Users/itzhak/Desktop/Development/Porvivo/AWSporvivo/node_modules/express/lib/view.js:93:8)
   at EventEmitter.app.render (/Users/itzhak/Desktop/Development/Porvivo/AWSporvivo/node_modules/express/lib/application.js:530:10)
   at ServerResponse.res.render (/Users/itzhak/Desktop/Development/Porvivo/AWSporvivo/node_modules/express/lib/response.js:933:7)

玉码:

each project, index in projects
      div(class='col-md-3 rowSpace')
          ul(class="room-details")
              li
                  a(href="/projects/" + project.sessionId id=project.sessionId)
                      h3(style='margin:0 0 3px')= project.projectName
              - var playerNames = [];
              - for(var playerIndex in project.players) playerNames.push(room.players[playerIndex].name);
              li
                  for playerName in playerNames
                      a(href="../" + playerName)= playerName
          a(href="/projects/" + project.sessionId id=project.sessionId): img(src=project.img class="img-responsive")

Js 代码(在客户端):

function loadProjects() {
    $.getJSON('/projects/info', function( data ) {
        console.log(JSON.stringify(data));
    });
}
$( document ).ready(function() {
    loadProjects();
    setInterval(loadProjects, 10000);
});

应用代码:(node.js)

var express = require('express'),
router = express.Router(),
Project = require('../schemas/project'),
projects = [];

Project.find().lean().exec(function(err, items) {
        if (err) {
            console.log('* ERROR!!! : ' + err);
        } else {
            projects = items;
            console.log('* SUCCESS : ' + JSON.stringify(projects));
        }
    });

    router.get('/info', function(req, res) {
        res.json({projects: projects});
    });

module.exports = router;

非常感谢!

伊扎克。

【问题讨论】:

  • 项目未定义

标签: javascript json node.js express pug


【解决方案1】:

不知道 Jade,但问题似乎来自数据。

似乎 projects 未定义,因此解析器无法读取它(我猜它会在遍历其子项之前尝试获取其长度,并引发错误)。

所以首先要做的是检查您从数据库收到的数据。

【讨论】:

  • 我正在检查它。我会告诉你这是否会解决。谢谢
【解决方案2】:

我发现了问题, 当我试图从客户端的 JS 获取玉的详细信息时,玉被呈现在服务器上。 我通过直接从服务器渲染细节来修复它,因为它更适合我的需求,但还有另一种选择,只向客户端发送一个空模板玉并通过 JS 将细节插入到 html。

希望有一天这会对某人有所帮助:)

【讨论】:

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