在node.js中将数组传递到jade模板时出现问题

Having problems with passing array to jade template in node.js

本文关键字:jade 问题 js node 数组      更新时间:2023-12-29

我正试图将新闻数组传递到屏幕上显示,但不知何故,我在浏览器中的结果中得到了空数组

路由/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.jaed

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)
        }); 
    }); 
};

它几乎可以工作,但它给我带来了未处理的异常。我该如何处理?

您可以将其作为数组传递,在渲染时不需要字符串化。然后在你的玉面上,你可以只使用&如果你只想循环浏览的话。

要让它作为对象传递给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)
  }); 

views/rss.jaed

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);