aks*_*adi 5 ejs node.js phantomjs html-pdf
尝试在节点 js 中使用 html-pdf 生成 pdf,但在某些记录后出现以下错误:
TypeError: Cannot read property 'on' of undefined`
events.js:183
throw er; // Unhandled 'error' event
^
Error: spawn /usr/local/lib/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs EAGAIN
Run Code Online (Sandbox Code Playgroud)
代码:
const filePathName = path.join(__dirname, '../../../views/', "invoice.ejs");
const htmlString = fs.readFileSync(filePathName).toString();
let options = { format: 'Letter',"timeout": 600000 };
const ejsData = ejs.render(htmlString, data);
return pdf.create(ejsData, options).toFile(path.join(__dirname, '../../../tmp/', data.filename), (err, response) => {
if (err) return console.log('err',err);
return response;
});
Run Code Online (Sandbox Code Playgroud)
线上const ejsData = ejs.render(htmlString, data);,ejs.render()是异步的。因此,您必须将函数转换为异步函数并添加等待,如下所示,
const yourFunction = async () => {
const filePathName = path.join(__dirname, '../../../views/', "invoice.ejs");
const htmlString = fs.readFileSync(filePathName).toString();
let options = { format: 'Letter',"timeout": 600000 };
const ejsData = await ejs.render(htmlString, data); //adding await
return pdf.create(ejsData, options).toFile(path.join(__dirname, '../../../tmp/', data.filename), (err, response) => {
if (err) return console.log('err',err);
return response;
});
}
Run Code Online (Sandbox Code Playgroud)
或者,做这样的事情:
const filePathName = path.join(__dirname, '../../../views/', "invoice.ejs");
const htmlString = fs.readFileSync(filePathName).toString();
let options = { format: 'Letter',"timeout": 600000 };
ejs.renderFile(htmlString, data, (err, ejsData) => {
if (err) {
res.send(err);
} else {
pdf.create(ejsData, options).toFile((path.join(__dirname, '../../../tmp/', data.filename), (err, response) => {
if (err) return console.log('err',err);
return response;
}););
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |