2014-03-03 41 views
2

我有app.js这段代码这是其中的“语言环境”集合中的所有内容找到一个回调:“没有法‘的forEach’类型错误”上的Node.js,EJS-Mongojs栈

tester = function(callback) { 
db.locale.find({}, function(err, locale) { 
    callback(null, locale) 
    }); 
}; 

当“index”(主页)被访问时设置“title”变量,并将“locale”集合内容传递给变量“content”,事先将其“串化”(如果我不知道,我得到[object] ,本发明的课题):

app.get('/', function(req, res) { 
tester(function(err, locale) { 
res.render('index', {title: "This is a test server", content: JSON.stringify(locale)}); 
}); 
}); 

的forEach在视图 “index.ejs”,其应该仅返回“标题”收藏领域的结果:

<ul> 
<% content.forEach(function(item){ %> 
<li><%= item.title %></li> 
<% }); %> 
</ul> 

但无论如何,问题是,我得到一个“‘类型错误’没有法‘的forEach’”当我浏览的页面。什么会导致此行为?谢谢!

+0

如果我读你的代码正确,你不应该'JSON.stringify(locale)'。你是从一个简单的'<%= content =>'获得'[object] [object]',然后选择将其串化?这是预料之中的,因为它会为简单的'content'标记调用toString(),但我希望它可以作为数组使用。当然会在Jade Express模板中。上面的内容实际上就是这个例子[EJS在其主页上显示](http://embeddedjs.com/)。 –

+0

原来你和Scott Gress是对的!当执行'forEach'时,不需要Stringifiying,因为它返回一个字符串,而不是一个数组。当你只是在不操作它的情况下执行'<%= content%>'时,它会返回“[object] [Object]”。 – buggy3

回答

2

在呈现它之前,您正在将对象locale字符串化。字符串没有forEach方法,只有数组!只要你不实际的打印整个content对象的页面,并假设locale是一个Javascript对象计划,你完全可以跳过字符串化的一部分,只是做:

res.render('index', {title: "This is a test server", content: locale}); 
相关问题