如何使用 Exceljs 通过 Express 生成 xlsx 文件并将其发送给客户端?
How to generate xlsx file trough Express with Exceljs and send it to client?
我想在我的 Express 应用程序中分离控制器和服务,目前,我有一个使用 ExcelJS 生成 XLSX 文件的服务,我想重用该服务,所以我不想将响应对象传递给服务,有什么方法可以 return 从服务到控制器的文件?
现在我有以下
const generateXLSX = (res, data) => {
let baseFile = "path/to/template.xlsx";
let wb = new Excel.Workbook();
wb.xlsx
.readFile(baseFile)
.then(async () => {
// add data to template
}
await wb.xlsx.write(res);
res.end();
})
.catch((err) => {
console.log(err);
res.status(500);
});
};
在这个函数中,我在服务中使用了响应对象,我想知道是否有办法 return 文件而不使用 write(res), 并在控制器中发送
您的 generateXLSX
函数可以 return 一个 "pass-through" readable stream,然后您将其传送到 res
对象中。像
const {PassThrough} = require("stream");
function generateXLSX(data) {
let baseFile = "path/to/template.xlsx";
let wb = new Excel.Workbook();
let readable = new PassThrough();
wb.xlsx
.readFile(baseFile)
.then(async function() {
// add data to template
await wb.xlsx.write(readable);
readable.end();
})
.catch((err) => {
readable.destroy(err);
});
return readable;
}
app.use("/path", function(req, res) {
generateXLSX(req.query.data).pipe(res);
});
我想在我的 Express 应用程序中分离控制器和服务,目前,我有一个使用 ExcelJS 生成 XLSX 文件的服务,我想重用该服务,所以我不想将响应对象传递给服务,有什么方法可以 return 从服务到控制器的文件?
现在我有以下
const generateXLSX = (res, data) => {
let baseFile = "path/to/template.xlsx";
let wb = new Excel.Workbook();
wb.xlsx
.readFile(baseFile)
.then(async () => {
// add data to template
}
await wb.xlsx.write(res);
res.end();
})
.catch((err) => {
console.log(err);
res.status(500);
});
};
在这个函数中,我在服务中使用了响应对象,我想知道是否有办法 return 文件而不使用 write(res), 并在控制器中发送
您的 generateXLSX
函数可以 return 一个 "pass-through" readable stream,然后您将其传送到 res
对象中。像
const {PassThrough} = require("stream");
function generateXLSX(data) {
let baseFile = "path/to/template.xlsx";
let wb = new Excel.Workbook();
let readable = new PassThrough();
wb.xlsx
.readFile(baseFile)
.then(async function() {
// add data to template
await wb.xlsx.write(readable);
readable.end();
})
.catch((err) => {
readable.destroy(err);
});
return readable;
}
app.use("/path", function(req, res) {
generateXLSX(req.query.data).pipe(res);
});