【问题标题】:Streaming Results and res.render nodejs流式传输结果和 res.render nodejs
【发布时间】:2012-04-29 13:38:51
【问题描述】:

我在 nodejs 中使用 express 和 mysql-native。使用 mysql-native 我从 db 中逐行流式传输结果,如下所示(在咖啡中):

exports.getUser = (username,callback) ->
 query = mysql.query "select * from users where username = #{username}"
 query.on "row", (row)->
  callback row

(显然我会使用准备好的语句,这是一个例子)

这种方法不适用于 res.render,因为每次获取新行时都不能多次调用 res.render

database.getUser "username", (result)->
  res.render "people", "data" : result 

是否有其他方法可以发送流式数据,或者我是否必须使用套接字将结果流式传输到视图?

【问题讨论】:

  • 你打算如何逐步渲染视图?这在大多数模板引擎中甚至都不可行。
  • 我不在乎它是如何呈现的,我只是不想进入套接字。如果我能避免它,我会很高兴

标签: node.js coffeescript express


【解决方案1】:

您可以直接使用您喜欢的模板引擎

var row = _.template('<tr><td> <%= id > </td> </tr>');
...
database.getUser "username", (result)->
  res.write( row(result) );

【讨论】:

    【解决方案2】:

    您可能想使用Express partials

    【讨论】:

      【解决方案3】:

      我昨晚在灵感的时刻想出了这个问题,因为我正在流式传输我可以在流结束时收听的数据并运行我的回调。这样我就可以将数据推送到一个数组,然后在回调中使用,如下所示:

       query = mysql.query "select * from users where id = 2"
       data = []
       query.on "row", (row)->
         data.push row
       query.on "end", ()->
         callback data
      

      【讨论】:

      • 这正是我所说的。您不能“流式传输”视图(在正常情况下)。在渲染之前你需要所有的数据。
      • 嗯,是的,您的评论很有帮助。这让我想到了一种不同的方式,而不是流式传输结果。但您认为这是一种最佳做法吗?
      • 没关系。通常一个简单的异步驱动程序就足够了,除非您在大型数据集上进行计算/转换,否则流式传输会给您带来巨大的性能优势。
      猜你喜欢
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多