【发布时间】:2020-04-15 17:43:17
【问题描述】:
我向我的 NodeJS API 添加了一个端点,以便能够使用库 PDFMake 生成和下载 PDF。我能够在服务器端生成和上传 PDF,但在浏览器站点上,PDF 被下载并失败,上面有 0 KB,我试图为它找到解决方案。
我知道该文件是在 writeStream 完成编写之前下载的,但添加了一个额外的功能,如下所示:
pdf.on("finish", async () => {
res.download(pdf);
res.send("PDF generated");
});
这并没有帮助,而是添加了一个额外的错误:
UnhandledPromiseRejectionWarning: RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: undefined
我不知道如何解决这个问题,希望得到帮助。很可能是我缺少的东西。
负责这些功能的代码是: 路由器
router.get("/pdf/all", async (req, res) => {
const movies = await movie.getMovies();
try {
const pdf = await generatePdf(movies, "all");
pdf.on("finish", async () => {
res.download(pdf);
res.send("PDF generated");
});
} catch (err) {
// Errors
res.status(err.status).json({ message: err.message });
throw new Error(error.message);
}
});
生成PDF
const generatePdf = (movies, name) => {
return new Promise((resolve, reject) => {
try {
let fonts = {
Roboto: {
normal: "Helvetica",
bold: "Helvetica-Bold",
italics: "Helvetica-Oblique",
bolditalics: "Helvetica-BoldOblique"
}
};
let printer = new pdfMaker(fonts);
const pdfTemplate = template(movies);
const pdfStream = printer.createPdfKitDocument(pdfTemplate, {});
const filePath = path.join(
__dirname,
uploads + "/" + pdfDir + `${name}.pdf`
);
console.log(filePath);
pdfStream.pipe(writeStream(filePath));
pdfStream.end();
resolve(filePath);
} catch (err) {
console.log(err);
reject(err);
}
});
};
【问题讨论】: