expressでCSVファイルをダウンロードさせる

手順

  1. オブジェクトをCSV文字列へ変換
  2. ヘッダーを付与
  3. レスポンスを返す

というような手順でCSVをダウンロードさせます。

1. オブジェクトをCSV文字列へ変換

json2csv というnpmモジュールを使ってオブジェクトをCSV形式の文字列に変換します。

const csv = json2csv.parse(dataList, ['id', 'message']);

2. ヘッダーを付与

生成した文字列をContent-dispositionとContent-Typeのヘッダーを付けて直接ダウンロードさせるようにします。

res.setHeader('Content-disposition', 'attachment; filename=data.csv');
res.setHeader('Content-Type', 'text/csv; charset=UTF-8');

3. レスポンスを返す

最後に作成した文字列のレスポンスを返します。

res.send(csv);

コード

const json2csv = require('json2csv');

router.get('/download', function(req, res, next) {
  dataList = [{
    id: 1,
    message: 'aaa'
  },{
    id: 2,
    message: 'bbb'
  },{
    id: 3,
    message: 'ccc'
  }]

  const csv = json2csv.parse(dataList, ['id', 'message']);

  res.setHeader('Content-disposition', 'attachment; filename=data.csv');
  res.setHeader('Content-Type', 'text/csv; charset=UTF-8');

  res.send(csv);
});

参照

https://stackoverflow.com/questions/35138765/download-csv-file-node-js