下载csv文件node.js

下载csv文件node.js,node.js,csv,download,Node.js,Csv,Download,我正在使用node.js构建一个应用程序,并尝试将数据下载为csv文件。为此,我使用json2csv()。但是,按照我的配置方式,.csv文件存储在我的应用程序的根目录中。我希望将该文件作为下载发送给用户-例如,该文件应显示在用户的/downloads文件夹中。这是我目前的代码: var fields = ['car', 'price', 'color']; var myCars = [ { "car": "Audi", "price": 1, "color": "b

我正在使用node.js构建一个应用程序,并尝试将数据下载为csv文件。为此,我使用json2csv()。但是,按照我的配置方式,.csv文件存储在我的应用程序的根目录中。我希望将该文件作为下载发送给用户-例如,该文件应显示在用户的
/downloads
文件夹中。这是我目前的代码:

var fields = ['car', 'price', 'color'];
var myCars = [
  {
    "car": "Audi",
    "price": 1,
    "color": "blue"
  }, {
    "car": "BMW",
    "price": 1,
    "color": "black"
  }, {
    "car": "Porsche",
    "price": 1,
    "color": "green"
  }
];

json2csv({ data: myCars, fields: fields }, function(err, csv) {
  if (err) console.log(err);
  fs.writeFile('file.csv', csv, function(err) { //currently saves file to app's root directory
    if (err) throw err;
    console.log('file saved');
  });

});

var file = '../software-project-metric-dashboard/file.csv';
res.download(file, 'testfile.csv'); 
有人能帮忙吗

谢谢

如果使用,请使用res.send

您必须定义一个HTTP GET路由,该路由如下所示:

app.get("/pathToYourDownload", function (req, res) {
  json2csv({ data: myCars, fields: fields }, function(err, csv) {
    res.setHeader('Content-disposition', 'attachment; filename=data.csv');
    res.set('Content-Type', 'text/csv');
    res.status(200).send(csv);
  });
});
在服务器上:

在客户端(否则大多数浏览器将不会下载该文件,即使您会在网络面板中看到正确的响应):


您是否打算使用像express这样的框架,还是只想使用一台服务器?我使用的是express framework@cviejoTry,如下所示,如果遇到任何问题,请返回:不要使用fs.writeFile,只发送具有适当内容类型的内容,与向客户端发送html内容的方式相同。嗨-我尝试了这个-它不会发送任何错误,但不会显示在我的下载文件夹中。但它确实会显示在我的控制台网络选项卡中,显示为304hm奇怪,如果你尝试只发送一些字符串而不是json.csv,只是为了测试呢?@Kiechlus的回答是正确的,但它使用的是过时的json2csv版本。当采用“看一看”这个答案时,我投了赞成票,因为即使我已经达到了所有数据都在那里的地步,浏览器也不会将其作为文件下载。“窗口打开”是客户端缺少的部分!谢谢你的提示:我确实发现在Mac/PC上它似乎都工作得很好。只需使用一个带有“a”的普通哈巴狗文件。2020
const json2csv = require('json2csv').parse;

const csvString = json2csv(yourDataAsArrayOfObjects);
res.setHeader('Content-disposition', 'attachment; filename=shifts-report.csv');
res.set('Content-Type', 'text/csv');
res.status(200).send(csvString);
window.open(downloadUrl);