手順
- オブジェクトをCSV文字列へ変換
- ヘッダーを付与
- レスポンスを返す
というような手順で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