提示使用node.js和node-csv-parser(节点模块)弹出下载csv文件

Man*_*mar 12 csv export node.js export-to-csv

最近我开始使用node.js. 在我的一个项目中遇到一个要求时,我遇到了一个问题,我应该能够动态地将一些数据写入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;
    });
Run Code Online (Sandbox Code Playgroud)

就编写csv文件而言,这是有效的.

  • 我想立即提示此文件为用户下载.
  • 如果可以在不保存文件的情况下完成,那就太棒了.
  • 如何像在PHP中一样设置内容类型和内容处置

任何帮助是极大的赞赏.-谢谢

joe*_*wen 33

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);

}
Run Code Online (Sandbox Code Playgroud)

  • 我觉得将`setHeader`与`set`混合起来是令人困惑和不一致的.即使他们做同样的事情,他们来自不同的地方.使用`setHeader()`来自NodeJS的`http`模块.如果你使用`res.set`,那就是来自Express框架; 如果给它一个对象,它允许设置多个标题:`res.set({'Content-Disposition':'attachment; filename = testing.csv','Content-Type':'text/csv'}) (5认同)

Man*_*mar 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);
Run Code Online (Sandbox Code Playgroud)


Pal*_*ani 12

以下解决方案适用于Express

快速发展,而不是设置附件和内容类型标题,直接使用附件api http://expressjs.com/4x/api.html#res.attachment

注意:attachment()不传输文件,只是在头文件中设置文件名.

response.attachment('testing.csv');
csv().from(data).to(response);
Run Code Online (Sandbox Code Playgroud)