Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
140
rated 0 times [  145] [ 5]  / answers: 1 / hits: 16033  / 11 Years ago, fri, november 29, 2013, 12:00:00

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 Welcome to #{title}
p Sure why not
script(type='text/javascript').
var inews = !{newsi};


EDIT



Ok so I have come 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.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)
});
});

};


It almost works but there it gets me unhandled exception. How should I handle this ?


More From » arrays

 Answers
11

You 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 Welcome to #{title}
p Sure why not
script(type='text/javascript').
// Pass as regular array here
var inews = JSON.parse('!{newsi}');
console.log(inews);

[#73983] Thursday, November 28, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
ishmaelw

Total Points: 528
Total Questions: 96
Total Answers: 103

Location: Venezuela
Member since Sat, Apr 24, 2021
3 Years ago
;