快速通过Node.js - TypeError:无法读取属性' forEach'未定义的

时间:2017-12-31 18:37:44

标签: javascript json node.js express

我正在构建我的第一个节点/快速应用,并且正在关注this tut

我正处于尝试获取所有JSON数据并将其放入数组以发送到模板并进行渲染的位置。当我尝试通过CLI运行应用程序时,出现以下错误:

CLI error

目录结构

directory structure for app

var blogsurlall位置的数据输出

JSON data output

hellotest.js

var routes = require('./routes/index');
var express = require('express');
var app = express();
var request = require("request");
var blogsurlall = "https://[JSON export URL location configured in a Drupal 8 view]";

app.set('view engine','ejs');

var server = app.listen (2000, function(){ console.log('Waiting for you on port 2000'); });

/* Get all global blogs data */
request({
    url: blogsurlall,
    json: true
}, function (error, response, body) {
    if (!error && response.statusCode === 200) {
        blogsdata_all = body;
    }

    // Create blogs array for footer.
    var blogs = [];

    // Fill up the array with blogs.
    blogsdata_all.blogs.forEach(function(item){
        blogs = blogs.concat(item);
    });

    app.locals.blogsdata = blogs;
});

app.use('/', routes);

index.js

var express = require('express');
var routes = express.Router();

routes.get('/', function(req, res){ res.render('default',{title: 'Home', body: 'blogsdata'}); });

routes.get('/about-us', function(req, res){ res.send('<h1>Lucius Websystems</h1>Amsterdam, The Netherlands'); });

routes.get('/about/:name?', function(req, res){ var name = req.params.name; res.send('<h1>' +name +'</h1>About text'); });

/* GET Blog detail page. */
routes.get('/blog/:blogid', function(req, res, next) {

    // Place json data in a var.
    var blogsdata = req.app.locals.blogsdata;

    // Create array.
    var blogItem = [];

    // Check and build current URL
    var currentURL = '/blog/' + req.params.blogid;

    // Lop through json data and pick correct blog-item based on current URL.
    blogsdata.forEach(function (item) {
        if (item.title == currentURL) {
            blogItem = item;
        }
    });

    if (blogItem.length == 0) {
        // Render the 404 page.
        res.render('404', {
            title: '404',
            body: '404'
        });

    } else {
        // Render the blog page.
        res.render('blog-detail', {
            blog: blogItem
        });
    }

});

module.exports = routes;

从CLI错误中,似乎没有任何博客数据被返回以读入数组。

我已经仔细阅读了几次教程,我认为有些步骤可能意味着我不知道。

有人可以帮我理解如何获取博客数据,以便将其读入数组并输出到我的模板中吗?

还可以在评论中查看疑难解答建议。

感谢阅读!

1 个答案:

答案 0 :(得分:0)

此行中出现错误:

blogsdata_all.blogs.forEach(function(item){

正如错误所述,博客未定义。 如果请求中存在错误或状态代码不是200,则主体未分配给变量,但您没有完成执行,因此该情况​​下的变量将是未定义的。 其他可能的问题是json收到的博客并不是身体的关键。 检查这两件事,如果发现问题,请告诉我们