2011-12-22 12 views
7

私は、ExpressJSアプリケーションで同じレスポンスオブジェクトを使用するために複数のレンダリングが必要な状況があります。 (基本的に1つのHTTPリクエストが複数のバックエンドリクエストをトリガします。これらのリクエストはすべて、完了したページにすぐに結果をレンダリングすることができます)問題は、それぞれのビューをレンダリングする必要があるということですres.write())、私が知る限り、res.render()は応答が終了しないか、呼び出されるたびにヘッダーを書き込むことができません。ExpressJSを使用して同じレスポンスオブジェクトに複数回レンダリングする方法は?

私には何が欠けていますか?

+1

どのように1回のHTTPリクエストに2回応答できますか? –

+0

これは2回応答していません。複数の機能からページに出力をストリームできるようにしたいだけです。 HTTP要求の結果、応答の一部を生成する他のサービスへのいくつかのAPI呼び出しが行われます。すべてのAPI呼び出しが完了するまで、すべてのユーザーが応答してページを一度にレンダリングするのを待つのではなく、応答オブジェクトを「オープン」のままにしてビュー(より正確にはビューの一部)を書き出すことができます。 –

+0

ああ、 'res.write'だけがあなたの唯一の選択肢になります。もちろん、 'res.render'を介してページの一部をロードし、その後AJAXを使って残りをロードするオプションもあります。 –

答えて

8

Expressは、データが、その後response.send使用してレンダリングされるEJS、翡翠などのように

をエンジンを使用してテンプレートをコンパイルします、あなたがそこに見ることができるようにhttps://github.com/visionmedia/express/blob/master/lib/response.js#L76-131

を、最後にthis.end...がありますresponse.end(...)を意味します。

複数のビューを送信したい場合は、ビューエンジンを使用して自分でビューをコンパイルし、response.send(これは私があなたに与えた)と同様の関数を作成する必要があります。最後のビューがレンダリングされる前にresponse.endを呼び出してください。

+3

私はこの回答を受け入れました。なぜなら、これは技術的に最も適切なソリューションだからです。私の場合、私は、複数の呼び出しを行って応答を集約し、より良いアプローチのように見えるので、一度だけレンダリングする方法を再設計しました。 alessioalexの指針は、これにアプローチしたいと思っている人なら誰でも手に入れることができます。コードへのポインタは、どこから始める必要があります。 –

関連する問題