2017-12-31 161 views
-2

Ich baue meine erste Knoten/Express-App und bin this tut.Express over Node.js - TypeError: Kann die Eigenschaft 'forEach' von undefined nicht lesen

Ich bin an einem Punkt, wo ich versuche, alle JSON-Daten zu bekommen und es in ein Array zu setzen, um an die Vorlage gesendet und gerendert zu werden. Wenn ich versuche, die App via CLI auszuführen, erhalte ich folgende Fehlermeldung:

CLI error

Verzeichnisstruktur

directory structure for app

Die Datenausgabe an dem var blogsurlall Standort

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; 

Von dem CLI Fehler scheint es keine Blog-Daten auch in das Array gelesen werden zurückgegeben.

Ich habe das Tutorial mehrere Male sorgfältig durchgegangen und ich denke, dass es Schritte gibt, die angedeutet werden können, dass ich vermisse.

Kann mir bitte jemand helfen, zu verstehen, wie man die Blogdaten erhält, damit sie in das Array eingelesen und an meine Vorlage ausgegeben werden können?

Auch offen für Vorschläge zur Problembehandlung in Kommentaren.

Danke fürs Lesen!

+1

Das bedeutet, dass 'blogsdata_all.blogs' ist wahrscheinlich nicht das Array, das Sie denken, dass es ist. Hast du überprüft, was es eigentlich ist? – Carcigenicate

Antwort

0

Der Fehler wird in dieser Linie erhöht:

blogsdata_all.blogs.forEach(function(item){ 

Wie der Fehler sagt, Blogs nicht definiert ist. Wenn ein Fehler in der Anforderung oder der Statuscode nicht 200 ist, wird der Text der Variablen nicht zugewiesen, aber Sie beenden die Ausführung nicht, daher wäre die Variable in diesem Fall nicht definiert. Ein anderes mögliches Problem ist, dass die JSON empfangen hat keine Blogs als Schlüssel des Körpers. Überprüfen Sie diese beiden Dinge und lassen Sie uns wissen, ob Sie das Problem gefunden haben

Verwandte Themen