13

最近、node.js を使い始めました。プロジェクトの 1 つで要件を処理しているときに、一部のデータを csv ファイルに動的に書き込んで、ポップアップとしてユーザーにダウンロードするように促す必要があるという問題に直面しています (保存とキャンセルのオプションを使用 - 通常のように)見る)。しばらくグーグルで調べた後、 csv npm モジュールhttps://github.com/wdavidw/node-csv-parserを使用することにしました。このモジュールを使用して、データをファイルに書き込み、保存することができます。ファイルを保存するかどうかに関係なく、このファイルを保存するためのポップアップを表示したいと思います。

私のコードは次のようになります。

    // Sample Data 
    var data = [["id", "subject1", "subject2", "subject3"], ["jack", 85, 90, 68], ["sam", 77, 89, 69]]

    // Server Side Code    
    var csv = require('../../node_modules/csv');            
    var fs = require('fs');

    createCSV = function(data, callback) {
        csv().from(data).to(fs.createWriteStream('D:/test.csv')) // writing to a file           
    }

    // Client side call sample
    $("#exportToCSV").click(function() {
        callToServer.createCSV(data);
       return false;
    });

csvファイルの書き込みに関する限り、これはうまく機能しています。

  • このファイルをすぐにダウンロードするようユーザーに促したいと考えています。
  • ファイルを保存せずにこれを行うことができれば、それは素晴らしいことです。
  • PHP で行うように content-type と content-disposition を設定するにはどうすればよいですか

どんな助けでも大歓迎です。-ありがとう

4

5 に答える 5

36

Manish Kumar の答えは的を射ています -これを達成するためにExpress 4構文バリアントを含めたかっただけです:

function(req, res) {
  var csv = GET_CSV_DATA // Not including for example.

  res.setHeader('Content-disposition', 'attachment; filename=testing.csv');
  res.set('Content-Type', 'text/csv');
  res.status(200).send(csv);

}
于 2015-11-06T19:29:40.037 に答える
15

私はそれを次のようにしました:

http.createServer(function(request, response) {
    response.setHeader('Content-disposition', 'attachment; filename=testing.csv');
    response.writeHead(200, {
        'Content-Type': 'text/csv'
    });

    csv().from(data).to(response)

})
.listen(3000);
于 2012-11-08T07:44:51.387 に答える
3

Express-csv は、csv コンテンツを書き込み、node.js サーバーからストリーミングするための優れたモジュールです。これは、クライアントへの応答として送信されます (そして、ファイルとしてダウンロードされます)。とても使いやすいです。

app.get('/', function(req, res) {
  res.csv([
    ["a", "b", "c"]
  , ["d", "e", "f"]
  ]);
});

ドキュメント: https://www.npmjs.com/package/express-csv

オブジェクトを渡すときは、ヘッダーを明示的に追加する必要があります (必要な場合)。npm mysqlを使用した私の例を次に示します。

router.route('/api/report')
    .get(function(req, res) {
            query = connection.query('select * from table where table_id=1;', function(err, rows, fields) {
                if (err) {
                    res.send(err);
                }
                var headers = {};
                for (key in rows[0]) {
                    headers[key] = key;
                }
                rows.unshift(headers);
                res.csv(rows);
            });
    });
于 2015-02-09T01:05:48.073 に答える
0

この回答を確認してください: Nodejs send file in response

基本的に、ファイルをハード ドライブに保存する必要はありません。代わりに、 に直接送信してみてくださいresponse。Express などを使用している場合は、次のようになります。

var csv = require('csv');
req.get('/getCsv', function (req, res) {
    csv().from(req.body).to(res);
});
于 2012-10-25T18:29:43.897 に答える