2012-04-18 11 views
0

私はexpressとmysql-nativeをnodejsで使用しています。 「ストリーミング結果とres.render nodejs

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

(明らかに私は、これは一例ですプリペアドステートメントを使用する)メソッドのこの種のは、勝った

ます。mysql-ネイティブで、私は(コーヒーで)このような行によってデシベルの行からの結果をストリームres.renderとトンの仕事あなたはres.renderを複数回呼び出すことができないので、あなたが

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

新しい行を取得するたびにストリームデータを送信するためのいくつかの他の方法はありますか私は、ビューに結果をストリーミングする必要がありますソケット付き?

+0

ビューを徐々にレンダリングする予定はありますか?それはほとんどのテンプレートエンジンでは実現できません。 –

+0

私はそれがどのようにレンダリングされても気にしません。私はちょうどソケットに入りたくありません。私がそれを避けることができれば私は満足してくれるでしょう – powerc9000

答えて

0

私はストリームが終了してコールバックを実行するときに私が聞くことができるデータをストリーミングしているので私はインスピレーションの瞬間に昨夜それを考え出した。そのようにして、データを配列にプッシュして、次のようにコールバックで使用できます。

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

それはまさに私が話していたことです。通常は、ビューを「ストリーミング」することはできません。すべてのデータは、レンダリングする前にまず必要です。 –

+0

さて、あなたのご意見はとても役に立ちました。結果をストリーミングするのではなく、別の方法を考えさせました。これをベストプラクティスと見なしますか? – powerc9000

+0

それは問題ありません。大規模なデータセットに対して計算/変換を行わない限り、通常はシンプルな非同期ドライバで十分ですが、ストリーミングは大きなパフォーマンス上の利点をもたらします。 –

0

あなたがExpress partialsを使用したい場合があり、直接

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

をお好みのテンプレートエンジンを使用することができます。

関連する問題