我想在我的 Express 應用程式中分離控制器和服務,目前,我有一個使用 ExcelJS 生成 XLSX 檔案的服務,我想重用該服務,所以我不想將回應物件傳遞給服務,是否存在一種可以將檔案從服務回傳到控制器的方法?
現在我有以下
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);
});
};
在這個函式中,我在服務中使用回應物件,我想知道是否有辦法在不使用write(res)的情況下回傳檔案,并將其發送到控制器中
uj5u.com熱心網友回復:
您的generateXLSX函式可以回傳一個“直通”可讀流,然后您將其通過管道傳輸到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);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/428890.html
標籤:javascript 节点.js 表示 回复 exceljs
