我正在尝试传递新闻数组以显示在屏幕上但我在某种程度上在浏览器的结果中得到空数组
路由/ rss.js
...
var news = [];
...
var this_news = {
'title': item.title,
'description': item.description
}
news.push(this_news);
...
res.render('rss', {
title: 'Node.js based RSS reader',
newsi: JSON.stringify(news)
});
视图/ rss.jade
extends layout
block content
h1= title
p Welcome to #{title}
p Sure why not
script(type='text/javascript').
var inews = !{newsi};
编辑
好的,所以我得出结论,问题在于我的'非回调逻辑'
这是我的代码:
var FeedParser = require(__dirname + '/../node_modules/feedparser')
, request = require(__dirname + '/../node_modules/request');
exports.news = function(req, res){
var news = [];
request('http://feeds.feedburner.com/niebezpiecznik/')
.pipe(new FeedParser())
.on('error', function(error) {
//...
})
.on('meta', function (meta) {
console.log('===== %s =====', meta.title);
console.log('**** %s ****', meta.description);
console.log();
})
.on('readable', function() {
var stream = this, item;
while (item = stream.read()) {
var this_news = {
'title': item.title,
'description': item.description
}
news.push(this_news);
}
res.render('rss', {
title: 'Node.js based RSS reader',
newsi: JSON.stringify(news)
});
});
};
它几乎可以工作,但它会让我得到未处理的异常。我该怎么处理?
答案 0 :(得分:10)
您可以将其作为数组传递,在渲染时不需要对其进行字符串化。然后在你的玉器方面,如果你只是想要循环,你可以使用for & each。
要将它作为对象传递给script
,尽管您使用带单引号的感叹号,然后解析您的对象以便您可以使用它。如果您要将其作为对象传递给脚本但是不使用Jade的内置迭代,那么您需要在rss.js
上进行字符串化。
<强>路由/ rss.js 强>
...
var news = [];
...
var this_news = {
'title': item.title,
'description': item.description
}
news.push(this_news);
...
res.render('rss', {
title: 'Node.js based RSS reader',
newsi: JSON.stringify(news)
});
<强>视图/ rss.jade 强>
extends layout
block content
h1= title
p Welcome to #{title}
p Sure why not
script(type='text/javascript').
// Pass as regular array here
var inews = JSON.parse('!{newsi}');
console.log(inews);