J'ai généré / exporté un fichier xlsx à l'aide du module json2xlsx npm et pour télécharger ce fichier, j'utilise la fonctionnalité res.download(file) de express.js.

Référence: Télécharger un fichier depuis NodeJS Server à l'aide d'Express

Voici mon code:

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

Afficher 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>

Code du contrôleur AngularJS:

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

Erreur: { [Error: Request aborted] code: 'ECONNABORTED' }

Erreur mise à jour

enter image description here

Toute aide serait appréciée.

3
J.K.A. 8 mars 2016 à 06:58

3 réponses

Meilleure réponse

Définir l'en-tête de la réponse avant 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');

MISE À JOUR :

Selon json2xls, vous pouvez utiliser res.xls('data.xlsx', jsonArr);.

Pour cela, vous devez configurer le middleware pour json2xls

app.use(json2xls.middleware);

MISE À JOUR 2:

Pour le frontal (AngularJS), reportez-vous ceci

5
Community 23 mai 2017 à 10:31

Peut-être votre fichier .xlsx enregistré dans le dossier racine.Alors, déplacez le fichier .xlsx sous le dossier public et activez-le dans express comme ci-dessous.

        app.use(express.static('./public'));
1
Vignesh Kumar 8 mars 2016 à 04:27

Je remarque que votre contrôleur angulaire fait un $http.put mais votre backend attend un GET (app.get). Êtes-vous sûr que c'est ainsi que vous aviez l'intention de le configurer?

0
CahirOD 10 mars 2020 à 09:27