2017-12-31 140 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がブログを身体の鍵として持っていないことです。 問題が見つかった場合は、この両方をチェックしてください。

関連する問題