ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 文件不下载express.js res.download

2019-08-29 09:34:36  阅读:312  来源: 互联网

标签:mean-stack javascript node-js excel express


我使用json2xlsx npm模块生成/导出了一个xlsx文件,并下载了我正在使用express.js的res.download(file)功能的文件.

参考:Download a file from NodeJS Server using Express

以下是我的代码:

var fs = require("fs");
var json2xls = require('json2xls');

app.use(json2xls.middleware);

app.get('/export/:id', function (req, res) {
    var id = req.params.id;
    db.collection('provider').findOne({_id: mongojs.ObjectId(id)}, function (err, doc) {
        var jsonArr = {};
        var arr = jsonArr = doc;
        var xls = json2xls(arr);
        fs.writeFileSync('data.xlsx', xls, 'binary'); //file exported

        //Now I want to download that file
        res.setHeader('Content-disposition', 'attachment; filename=data.xlsx');
        res.setHeader('Content-type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        res.download(__dirname + '/public/data.xlsx', function (error) {
          console.log(error);
        });

        //res.json(doc);
    });
});

查看HTML

        <div class="panel-body">

            <div class="form-group" ng-repeat="(key,value) in providerList"  ng-if="!$first">                    
                    <label>{{key.replace("_", " ") | uppercase}}</label>
                    <input type="text" class="form-control" id="title" placeholder="Enter Title" ng-model="providerList[key]">                    
            </div>

            <div class="well well-lg text-center bg-gray">                                        
                <button class="btn-lg btn-success" ng-click="export(id)">Export to Spreadsheet</button>
            </div>
        </div>

AngularJS控制器代码:

$scope.export = function (id) {
            $http.put('/export/' + id, $scope.providerList).success(function (response) {
                 if (response) {
                    alert("File is successfully exported at: "+ response);
                }
            });
        };

错误:{[错误:请求已中止]代码:’ECONNABORTED’}

更新错误

enter image description here

任何帮助,将不胜感激.

解决方法:

在res.download()之前设置响应头,

res.setHeader('Content-disposition', 'attachment; filename=data.xlsx');
res.setHeader('Content-type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.download(__dirname + '/data.xlsx');

更新:

根据json2xls,
你可以使用res.xls(‘data.xlsx’,jsonArr);.

为此,您必须为json2xls设置中间件

app.use(json2xls.middleware);

更新2:

对于前端(AngularJS),请参阅this

标签:mean-stack,javascript,node-js,excel,express
来源: https://codeday.me/bug/20190829/1759715.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有