L’appel de l’API REST ne fonctionne qu’une fois

J’ai écrit une application d’API REST Nodejs avec un certain nombre de fonctions. Cependant, lorsque je consum l’une des API, il me renvoie le fichier excel qu’il est censé renvoyer et tout va bien jusque là. Après cela, l’application cesse de répondre et toutes les autres fonctions cessent de fonctionner. Le cde de la fonction problématique est le suivant:

app.get('/api/Export', function (req, res) { UsageData.aggregate([{ $match: { $and: [{ GroupName: { $ne: "Group1" } }, { GroupName: { $ne: "Group2" } }] } } , { $group: { _id: '$ToolType' , count: { $sum: 1 } } }] , function (err, usagedata) { usagedata = getJSON(usagedata); // if there is an error resortingeving, send the error. nothing after res.send(err) will execute if (err) res.send(err) var wb = new xl.WorkBook(); var ws = wb.WorkSheet('Usage'); ws.Column(2).Width(35); var headercell1 = ws.Cell(2, 2); headercell1.Ssortingng('Tool'); var headercell2 = ws.Cell(2, 3); headercell2.Ssortingng('Usage'); var myStyle = wb.Style(); myStyle.Font.Bold(); myStyle.Fill.Color('#CCCCCC'); myStyle.Border({ top: { style: 'thick' , color: '000000' } , right: { style: 'thick' , color: '000000' } , bottom: { style: 'thick' , color: '000000' } , left: { style: 'thick' , color: '000000' } }); myStyle.Font.Alignment.Horizontal('center'); var borderstyle = wb.Style(); borderstyle.Border({ top: { style: 'thin' , color: '000000' } , right: { style: 'thin' , color: '000000' } , bottom: { style: 'thin' , color: '000000' } , left: { style: 'thin' , color: '000000' } }); borderstyle.Font.Alignment.Horizontal('center'); headercell1.Style(myStyle); headercell2.Style(myStyle); for (var i = 0; i < usagedata.length; i++) { var cell = ws.Cell(2 + i + 1, 2); cell.String(usagedata[i].Tool); cell.Style(borderstyle); var cell1 = ws.Cell(2 + i + 1, 3); cell1.Number(usagedata[i].Count); cell1.Style(borderstyle); } UsageData.aggregate([{ $match: { $and: [{ GroupName: { $ne: "" } }, { GroupName: { $ne: "Group1" } }, { GroupName: { $ne: "Group2" } }] } } , { $group: { _id: '$GroupName' , count: { $sum: 1 } } }] , function (err, data) { // if there is an error retrieving, send the error. nothing after res.send(err) will execute if (err) res.send(err) var wsg = wb.WorkSheet("Group Usage"); wsg.Column(2).Width(35); var headercell = wsg.Cell(2, 2); headercell.String('Group'); headercell.Style(myStyle); var headercell = wsg.Cell(2, 3); headercell.String('Usage'); headercell.Style(myStyle); for (var i = 0; i < data.length; i++) { var cell = wsg.Cell(2 + i + 1, 2); cell.String(data[i]._id); cell.Style(borderstyle); var cell1 = wsg.Cell(2 + i + 1, 3); cell1.Number(data[i].count); cell1.Style(borderstyle); } wb.write('Report.xlsx', res); var filename = "Report.xlsx"; res.setHeader('Content-disposition', 'attachment; filename=' + filename); res.setHeader('Content-type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); res.pipe(res); }); return; }); return; }); 

J’utilise Node4Excel pour générer un fichier Excel à partir des données que je reçois de mon Mongodb. L’API renvoie le fichier Excel pour la première fois. Deuxième fois, il ne renvoie rien et les autres API non plus. S’il vous plaît aider.

Je l’ai finalement résolu en utilisant les lignes suivantes:

  wb.write('Report.xlsx', res,function(){ var filename = "Report.xlsx"; res.setHeader('Content-disposition', 'attachment; filename=' + filename); res.setHeader('Content-type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); res.pipe(res); });