我试图传递一系列新闻在屏幕上显示但我在某种程度上在浏览器的结果中得到空数组
路线/ 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) }); }); };
它几乎可以工作,但它让我得到了未处理的异常.我该怎么处理?
您可以将其作为数组传递,在渲染时不需要对其进行字符串化.然后在你的玉器一侧,如果你只是想要循环,你可以使用for和each.
要将它作为对象传递给a 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);