Javascript 使用angularjs、nodejs、expressjs单击按钮后,在前端下载Csv文件

Javascript 使用angularjs、nodejs、expressjs单击按钮后,在前端下载Csv文件,javascript,node.js,angularjs,mongodb,express,Javascript,Node.js,Angularjs,Mongodb,Express,我想在前端下载.csv文件 这是我的代码: $http.get('/entity/consultations/_/registerationReport' ) .success(function (data) { myWindow = window.open('../entity/consultations/_/registerationReport', '_parent'); myWindow.close(); }); 我使用jso

我想在前端下载.csv文件

这是我的代码:

$http.get('/entity/consultations/_/registerationReport' )
     .success(function (data) {
         myWindow = window.open('../entity/consultations/_/registerationReport', '_parent');
         myWindow.close();
       });
我使用
json2csv
converter在csv文件中进行编写

json2csv({data: report, fields: fields}, function (err, csv) {
    if (err) throw err;
    res.setHeader('Content-Type', 'application/csv');
    res.setHeader("Content-Disposition", "attachment; filename=" + "Report.csv");
    res.end(csv, 'binary');
});

但是它在浏览器上打印csv文件的数据,而不是下载csv文件。

@Pawan,您的
json2csv
功能没有问题。问题在于,您正试图使用Angular的
$http
服务通过XMLHttpRequest(XHR)请求触发下载。XHR调用表明您的代码将处理来自服务器的响应。因此,
内容配置
标题被浏览器忽略,不会触发在浏览器上的下载

json2csv({data: report, fields: fields}, function (err, csv) {
    if (err) throw err;
    res.setHeader('Content-Type', 'application/csv');
    res.setHeader("Content-Disposition", "attachment; filename=" + "Report.csv");
    res.end(csv, 'binary');
});
据我所知,您有几种选择:

  • 如果您没有对客户端进行任何预处理,为什么不直接使用到
    /entity/consultations/\uu/registrationreport
    (使用和
    标记)的链接呢
  • 您还可以编写
    $window。从角度代码打开(…)
    (这将产生弹出选项卡或窗口闪烁的丑陋副作用)

  • 可能还有许多其他的解决方案,但这些是唯一能立即想到的。底线是XHR不是您想要完成的任务的合适工具。

    您尝试过res.download吗?