最近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ファイルの書き込みに関する限り、問題なく機能しています。
どんな助けでも大歓迎です。 -ありがとう
私はそれをこのようなことをしました:
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);
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);
}
次の解決策はExpress用です
Expressは進化し、添付ファイルとコンテンツタイプヘッダーを設定する代わりに、添付ファイルAPIを直接使用 http://expressjs.com/4x/api.html#res.attachment
注:attachment()はファイルを転送せず、ヘッダーにファイル名を設定するだけです。
response.attachment('testing.csv');
csv().from(data).to(response);
Express-csvは、node.jsサーバーからストリーミングするcsvコンテンツを書き込むための優れたモジュールであり、クライアントへの応答として送信されます(ファイルとしてダウンロードされます)。とても使いやすい。
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);
});
});
この回答を確認してください: Nodejs send file in response
基本的に、ファイルをハードドライブに保存する必要はありません。代わりに、response
に直接送信してみてください。 Expressなどを使用している場合は、次のようになります。
var csv = require('csv');
req.get('/getCsv', function (req, res) {
csv().from(req.body).to(res);
});