【发布时间】:2021-04-25 22:33:32
【问题描述】:
我正在尝试使用 node express 构建一个简单的报表服务器。但是,它没有按预期运行。
这是我生成报告的 api 端点:
router.post('/test', async function (req, res) {
return res.json(await reportService.test());
});
这是服务层:
var pdf = require("pdf-creator-node");
var fs = require("fs");
var path = require("path");
var base64Util = require("../utils/base64util");
async function test() {
var html = fs.readFileSync(path.join(__dirname, "../templates/test.html"), "utf8");
var options = {
format: "A3",
orientation: "portrait",
border: "10mm",
header: {
height: "45mm",
contents: '<div style="text-align: center;">header</div>'
},
footer: {
height: "28mm",
contents: {
first: 'Cover page',
2: 'Second page',
default: '<span style="color: #444;">{{page}}</span>/<span>{{pages}}</span>',
last: 'Last Page'
}
}
};
var users = [{
name: "Shyam",
age: "26",
},
{
name: "Navjot",
age: "26",
},
{
name: "Vitthal",
age: "26",
},
];
var document = {
html: html,
data: {
users: users
},
path: path.join(__dirname, "../reports/test.pdf"),
type: "",
};
pdf
.create(document, options)
.then(async (res) => {
logger.info("Report Generated: " + res.filename);
let base64 = await base64Util.convert("../reports/test.pdf");
return {
success: true,
url: res.filename,
base64: base64
};
})
.catch((error) => {
logger.error(error);
return {
success: false
};
});
}
module.exports = {
test
}
这是pdf转base64的方法:
const pdf2base64 = require('pdf-to-base64');
var path = require("path");
async function convert(filePath){
pdf2base64(path.join(__dirname, filePath))
.then(
(response) => {
return response;
}
)
.catch(
(error) => {
logger.log(error);
return false;
}
)}
module.exports = {
convert
}
我想在生成 pdf 然后将其转换为 base64 后发送响应。但它没有返回任何东西。
【问题讨论】:
-
您错误地将
async与convert一起使用,没有return值。test函数相同。.then(response => { return response })也没有做任何事情。async function convert(filePath) { return await pdf2base64(...) }实际上返回一个值,但它是一种反模式。只需写function convert(filePath) { return pdf2base64(...) }或简单地写const convert = filePath => pdf2base64(...)。为调用者留下错误处理 -
有效!谢谢你的帮助。我应该学习更多 Async/Await :)
标签: javascript node.js express async-await