【问题标题】:Express over Node.js - TypeError: Cannot read property 'forEach' of undefinedExpress over Node.js - TypeError:无法读取未定义的属性“forEach”
【发布时间】:2017-12-31 18:37:43
【问题描述】:

我正在构建我的第一个 node/express 应用程序并关注this tut

我正试图获取所有 JSON 数据并将其放入一个数组中以发送到模板并呈现。当我尝试通过 CLI 运行应用程序时,我收到以下错误:

目录结构

var blogsurlall 位置的数据输出

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 错误来看,似乎没有返回博客数据以读取到数组中。

我已经仔细阅读了几次教程,我认为有些步骤可能暗示我遗漏了。

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

还接受 cmets 中的故障排除建议。

感谢阅读!

【问题讨论】:

  • 这意味着blogsdata_all.blogs 可能不是您认为的数组。你检查过它实际上是什么吗?

标签: javascript json node.js express


【解决方案1】:

此行中出现错误:

blogsdata_all.blogs.forEach(function(item){

正如错误所说,博客是未定义的。 如果请求中有错误或状态码不是 200,则正文未分配给变量,但您尚未完成执行,因此在这种情况下变量将未定义。 其他可能的问题是收到的 json 没有博客作为正文的关键。 检查这两项,如果您发现问题,请告诉我们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多