2017-12-31 346 views
-2

첫 번째 노드/익스프레스 앱을 구축 중이며 this tut을 따르고 있습니다.Node.js 이상의 익스프레스 - TypeError : 정의되지 않은 'forEach'속성을 읽을 수 없습니다.

나는 모든 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는 CLI 오류에서

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; 

, 블로그 데이터도 배열로 읽을 수 반환되지 않습니다 나타납니다.

나는 여러 번 튜토리얼을주의 깊게 읽었으며, 실종되었다는 암시가있는 단계가 있다고 생각합니다.

누군가 블로그 데이터를 가져 와서 배열로 읽고 내 템플릿으로 출력 할 수 있도록 도와 주실 수 있습니까?

댓글의 문제 해결 제안에 대해서도 열립니다.

읽어 주셔서 감사합니다.

+1

즉,'blogsdata_all.blogs'는 사용자가 생각하는 배열이 아닙니다. 그것이 실제로 무엇인지 확인 했습니까? – Carcigenicate

답변

0

오류는이 라인에서 제기되어 오류가 말한다

blogsdata_all.blogs.forEach(function(item){ 

으로, 블로그는 정의되지 않습니다. 요청에 오류가 있거나 상태 코드가 200이 아닌 경우 본문은 변수에 할당되지 않지만 실행을 완료하지 않으므로이 경우 변수가 정의되지 않습니다. 다른 가능한 문제는 수신 된 json이 블로그를 본문의 핵심으로 갖고 있지 않다는 것입니다. 이 두 가지를 모두 확인하고 문제가 발견되면 알려주십시오