为什么我的数据路由只能部分工作?

时间:2017-03-08 03:48:48

标签: javascript node.js express

app.js使用JSON文件中的文章将allArticles初始化为全局变量。

app.locals.allArticles = dataFile.articles;

articles.js(route)获取应用数据,并在articles.ejs页面中提供

router.get('/articles', function(req, res) {
  var data = req.app.get('appData');
  var articleTitles = data.articles;

  res.render('articles', {
    pageTitle: 'Articles',
    pageID: 'articles',
    articles: articleTitles
  });
});

header.ejs引用allArticles如下

<% allArticles.forEach(function(item) { %>
  <%= item.name %>
<% }); %>

问题:对PageID或文章的引用会引发引用错误,即

allArticles is not defined

奇怪的是,对pageTitle的引用经历了..

3 个答案:

答案 0 :(得分:0)

您正在将名为articles的视图变量传递给您的视图,而不是allArticles。重命名其中一个以使它们匹配,错误就会消失。

答案 1 :(得分:0)

您将articles作为对象而非数组传递,我认为它是articleTitles的文章数组,因此您可以将EJS代码更改为:

<% articles.articles.forEach(function(item) { %>
  <%= item.name %>
<% }); %>

答案 2 :(得分:0)

成功将数据从JSON文件传递到视图中,如下所示:

app.js使文章数组可用于本地路线:

app.locals.allArticles = dataFile.articles;

index.js(route)接受app数据,创建数组来保存数据,使用forEach函数传递数据,在视图中呈现:

router.get('/', function(req, res) {
  var data = req.app.get('appData');
  var allArticles = [];

  data.articles.forEach(function(item) {
    allArticles = item.title;
  });

  res.render('index', {
    pageTitle: 'Home',
    pageID: 'home',
    articles: allArticles
  });
});

index.ejs(view):

<% allArticles.forEach(function(item) { %>
  <%= item.name %><br/>
<% }); %>