У меня ограниченный опыт работы с узлами, поэтому, пожалуйста, простите меня, если это элементарно.
У меня есть метод Controller, который должен возвращать загружаемый документ Excel.Я не уверен, как мне вернуть документ для загрузки, особенно вокруг объекта ответа.
Я не уверен, где объявить объект ответа ...
Функциональность загрузки прекрасно работаетпри использовании в моем тестовом экспресс-проекте, например, так ... как вы видите объект ответа res, поступающий из
function(req, res){}
, из которого я могу затем вернуть документ.
var Excel = require('exceljs');
app.get('/doexcel/', function (req, res) {
var nameVal1 = req.params.name1;
user.user.model('Contact').find({}, function (err, users1) {
var workbook = new Excel.Workbook();
var worksheet = workbook.addWorksheet('My Sheet');
worksheet.addRow(['09/05/2019', 'Test Msg Title example ' + i, 'Test Message Body Example Example']);
var filename = 'C:\\myStuff\\TestProjects\\NodeTestProjects\\ExpressExample\\files\\ExampleWriteFile.xlsx';
workbook.xlsx.writeFile(filename)
.then(function () {
// done
//res.send(200);
console.log('written file');
});
/*stream file for download */
res.status(200);
res.setHeader('Content-Type', 'text/xlsx');
res.setHeader(
'Content-Disposition',
'attachment; filename=teststream.xlsx'
);
workbook.xlsx.write(res)
.then(function () {
res.end()
});
/*stream file for download */
});
});
Итак, следуя некоторым из существующих контроллеров в проекте PROD, я настроил контроллер, как показано ниже.Очевидно, что «ответный» объект, на который ссылаются, не существует.
var Excel = require('exceljs');
//Controller Method
function getReport(clientId, query) {
return new Promise(function (resolve, reject) {
if (!query.filter.noteId) {
return reject(new apiError.BadRequest("NoteId is a mandatory query parameter, usage: <url>?noteId=note123&<optional params>"));
}
//get report data from datasource
var reportData = getReportData(clientId, query);
//Build Workbook using exceljs
var dataWorkbook = CreateWorkbook(reportData);
return resolve(dataWorkbook);
});
}
//Create Excel workbook
function CreateWorkbook(reportDataVal)
{
var datetime = new Date();
var workbook = new Excel.Workbook();
var worksheet = workbook.addWorksheet('Data_Report_' + datetime);
worksheet.properties.outlineProperties = {
summaryBelow: false,
summaryRight: false,
showDetail: false,
};
worksheet.addRow(['Random Data', 'More Random Data']);
/*stream file for download */
response.status(200);
response.setHeader('Content-Type', 'text/xlsx');
response.setHeader(
'Content-Disposition',
'attachment; filename=teststream.xlsx'
);
workbook.xlsx.write(response)
.then(function () {
response.end()
});
/*stream file for download */
}
Как или где мне следует объявить объект «ответ» в этом случае, чтобы разрешить возврат загружаемого документа?
Спасибо.