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的引用经历了..
答案 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/>
<% }); %>