简体   繁体   中英

Cannot read property 'length' of undefined node.js

I have some JSON I'm passing into Node.js and I'm trying to parse through it and display it on the page. However, after searching around on Stack Overflow and trying out various solutions (currently reading this ), I'm receiving this error in return:

TypeError: D:\Programming\node\yale\views\index.jade:10
    8|          //- p= post.comments[1].data
    9|          each comment in post.comments
  > 10|                 each text in comment.data
    11|                     p= text.from.name
    12| 
    13| 

Cannot read property 'length' of undefined
    at $$l (eval at <anonymous> (D:\Programming\node\yale\node_modules\jade\lib\jade.js:172:8), <anonymous>:122:31)
    at $$l (eval at <anonymous> (D:\Programming\node\yale\node_modules\jade\lib\jade.js:172:8), <anonymous>:153:4)
    at eval (eval at <anonymous> (D:\Programming\node\yale\node_modules\jade\lib\jade.js:172:8), <anonymous>:160:4)
    at eval (eval at <anonymous> (D:\Programming\node\yale\node_modules\jade\lib\jade.js:172:8), <anonymous>:301:4)
    at eval (eval at <anonymous> (D:\Programming\node\yale\node_modules\jade\lib\jade.js:172:8), <anonymous>:311:21)
    at res (D:\Programming\node\yale\node_modules\jade\lib\jade.js:173:38)
    at Object.exports.render (D:\Programming\node\yale\node_modules\jade\lib\jade.js:269:10)
    at Object.exports.renderFile (D:\Programming\node\yale\node_modules\jade\lib\jade.js:305:18)
    at View.exports.renderFile [as engine] (D:\Programming\node\yale\node_modules\jade\lib\jade.js:290:21)
    at View.render (D:\Programming\node\yale\node_modules\express\lib\view.js:76:8)

Here's my JSON:

[
    {
        "id": "362285220481827_740014816042197",
        "from": {
            "id": "1677018201",
            "name": "ABC"
        },
        "message": "Yo!",


        "comments": {
            "data": [
                {
                    "id": "740018622708483",
                    "from": {
                        "id": "100003969443486",
                        "name": "XTZ"
                    },
                    "message": "Hey!",
                    "can_remove": false,
                    "created_time": "2014-06-14T17:18:48+0000",
                    "like_count": 0,
                    "user_likes": false
                }
            ],
            "paging": {
                "cursors": {
                    "after": "NzQ0MTMxNTc1NjMwNTIx",
                    "before": "NzQwMDE4NjIyNzA4NDgz"
                }
            }
        }
    }
]

Index.jade

extends layout

block content
    each post in datas 
        div(id='post')
            p= post.from.name
            p= post.message
            //- p= post.comments[1].data
            each comment in post.comments
                each text in comment.data
                    p= text.from.name

Index.js

var express = require('express');
var router = express.Router();
var fs = require('fs');
var path = require('path');

var file = '../public/sample.json';
var filePath = path.join(__dirname, '../public/sample.json');
    /* GET home page. */
router.get('/', function(req, res) {
    fs.readFile(filePath, 'utf8', function(err, data) {
        if(err) {
            console.log(err);
        } else {
            data = JSON.parse(data);
            res.render('index', { datas: data });
            console.log(data);
        }

    });

});

module.exports = router;

My question is, how do I retrieve the data inside the Comments object? Thanks for your help!

I think you want to iterate the posts data, not the object itself.

each comment in post.comments.data
  p= comment.from.name

comments isn't an array in your JSON structure, it's an object. Try making it an array.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM