52

おそらくdbに保存されているコンテンツをクライアントにストリーミングし、ファイルとして保存したいと考えています。

明らかに res.download はうまく機能しますが、response.* 関数はどれもストリームを受け入れず、ファイル パスのみを受け入れます。

私は res.download impl を見て、Content-Disposition ヘッダーを設定してから sendfile を設定するだけです。

したがって、この投稿をガイドとして使用してこれを達成できました。 Node.js: パイプ ストリームからレスポンスへのパイプが HTTPS 経由でフリーズする

しかし、 res.send が実行するすべてのラッピングの側面を見逃すようです。

ここで何か不足していますか、それともパイプを実行して心配する必要はありません - ここでのベストプラクティスは何ですか?

現在一時ファイルを作成しているので、今のところ res.download を使用できます。

4

2 に答える 2

121

応答オブジェクトに直接ストリーミングできます (これはストリームです)。

基本的なファイル ストリームは次のようになります。

function(req, res, next) {
  if(req.url==="somethingorAnother") {
    res.setHeader("content-type", "some/type");
    fs.createReadStream("./toSomeFile").pipe(res);
  } else {
    next(); // not our concern, pass along to next middleware function
  }
}

dataこれにより、イベントへのバインドが処理されendます。

于 2013-07-23T18:44:32.693 に答える