2016-11-15 22 views
-1

私はNode JSを使用します。 (Sails JSフレームワーク、それほど重要ではない)。Nodejs:mongodbから大きなデータをダウンロードして変換する

目的

のMongoDBから変換されたデータが含まれたCSVファイルをダウンロードしてください。大規模なデータのダウンロード要求

  1. に対する応答にサーバーのシナリオだ

    はMongoDBのデータを読みます。

  2. データ形式を(CSVに)変換します。
  3. レスポンスにデータを送信します。 (ダウンロード)。

したがって、ユーザーはこの大きなデータをブラウザにダウンロードすることが予想されます。

このような要求を処理するには、どのような方法が最適かわかりません。

+1

この質問は、StackOverflowのトピックではありません。これには正しい答えはありません。多くの潜在的な回答があり、非常に幅広いです。 –

答えて

-1

これまでに試したことのコードを投稿することをお勧めします。

まず、あなたはあなたがCSVファイルにデータを変換するために、csvのようなライブラリを使用することができます第二にSailsJS

を使用している場合mongooseやウォーターラインのようなものを使用するMongoDBからデータを取得する必要があります。あなたが帆を使用して、ユーザーにファイルを返すことができるファイルを作成したら

そうのような応答:

res.attachment('path/to/file.csv'); 
+0

あなたはこれらのような質問に答えるべきではありません - 単に正しい答えがありません。これは広く開かれた質問です。 –

0

MongoDBはストリーミングのサポートを内蔵しており、Node.jsのクライアントが読み込み可能なストリームを提供することができますカーソルのために。すべてのHTTP応答オブジェクトは、一連の書き込みによって応答本体をストリーミングする方法や、WebSocketを使用するときにソケットにパイプする方法も提供します。ほとんどの作業はMongoDBサーバにオフロードされ、Node.jsはこれらの種類の要件のために開発されました。

クライアント側でHTTPを使用する場合は、fetch()を使用して応答本体をメモリにストリーミングできます。ここでは効率的に大規模なCSVファイルの応答を処理する方法を示してexcellent articleです:

const res = await fetch('/big-data.csv') 
const csvStream = response.body 
    .pipeThrough(new TextDecoder()) 
    .pipeThrough(new CSVDecoder()) 

for (;;) { 
    const {row, done} = await csvStream.read() 

    if (done) break 
    drain(row) 
} 

そのサーバーとクライアントのサポートエンコードされたコンテンツの両方を忘れてしまったので、あなたは、さらにIを改善するための応答を圧縮することを確認しないでください。/O。

関連する問題