2012-04-18 39 views
0

我使用express和mysql-native與nodejs。與MySQL原生我流從DB行結果按行這樣的(咖啡):流結果和res.render nodejs

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

(很明顯,我會用準備好的語句,這是一個例子)

這類方法贏得」與res.render將不起作用,因爲你不能要求每你得到一個新的行

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

時間res.render多次是否有發送一些其他的方法流數據或我將不得不流導致的看法帶插座?

+0

你打算如何逐漸呈現視圖?這在大多數模板引擎中都不可行。 – 2012-04-18 07:00:51

+0

我不在乎它是如何呈現的,我只是不想進入套接字。如果我能避免它,我會很高興 – powerc9000 2012-04-18 07:10:24

回答

0

昨天晚上我在靈感的時刻想到了它,因爲我正在流式傳輸數據,我可以在流結束並運行回調時監聽數據。這樣我可以將數據推送到一個數組,然後像這樣在回調中使用:

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

這正是我所說的。你不能「流」視圖(在正常情況下)。您可以先呈現所有數據,然後才能呈現它。 – 2012-04-18 18:56:13

+0

嗯,你的評論是非常有幫助的。這讓我想到了一種不同的方式,而不是流式傳輸結果。但你會認爲這是最佳做法嗎? – powerc9000 2012-04-18 21:29:52

+0

沒關係。通常一個簡單的異步驅動程序就足夠了,除非您正在對大型數據集進行計算/轉換,然後流式傳輸爲您帶來巨大的性能優勢。 – 2012-04-19 02:20:53

0

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

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