I am trying to pass array of news to display on the screen but I somehow am getting empty array in the result in the browser
routes/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)
});
views/rss.jade
extends layout
block content
h1= title
p Wele to #{title}
p Sure why not
script(type='text/javascript').
var inews = !{newsi};
EDIT
Ok so I have e to the conclusion that the problem lies with my 'non-callback logic'
that's my code :
var FeedParser = require(__dirname + '/../node_modules/feedparser')
, request = require(__dirname + '/../node_modules/request');
exports.news = function(req, res){
var news = [];
request('/')
.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)
});
});
};
It almost works but there it gets me unhandled exception. How should I handle this ?
I am trying to pass array of news to display on the screen but I somehow am getting empty array in the result in the browser
routes/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)
});
views/rss.jade
extends layout
block content
h1= title
p Wele to #{title}
p Sure why not
script(type='text/javascript').
var inews = !{newsi};
EDIT
Ok so I have e to the conclusion that the problem lies with my 'non-callback logic'
that's my code :
var FeedParser = require(__dirname + '/../node_modules/feedparser')
, request = require(__dirname + '/../node_modules/request');
exports.news = function(req, res){
var news = [];
request('http://feeds.feedburner./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)
});
});
};
It almost works but there it gets me unhandled exception. How should I handle this ?
Share Improve this question edited Dec 7, 2013 at 0:46 Patryk asked Nov 29, 2013 at 23:09 PatrykPatryk 24.1k47 gold badges142 silver badges257 bronze badges1 Answer
Reset to default 12You can just pass it as an array, you don't need to stringify it when you are rendering. Then on your jade side you can just use for & each if you are only wanting to loop through.
To get it to pass as an object to a script
though you use an exclamation mark with single quotes then parse your object so you can use it. If you are going to pass it as an object to a script however and not use Jade's built-in iterating then you will need to stringify on your rss.js
.
routes/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)
});
views/rss.jade
extends layout
block content
h1= title
p Wele to #{title}
p Sure why not
script(type='text/javascript').
// Pass as regular array here
var inews = JSON.parse('!{newsi}');
console.log(inews);