【发布时间】:2015-08-17 08:48:00
【问题描述】:
我正在使用 html-pdf 模块生成 pdf,使用以下代码:
var ejs = require('ejs');
var fs = require('fs');
var pdf = require('html-pdf');
var build = function (template, data) {
var html = ejs.compile(fs.readFileSync(template, 'utf8'));
html = html(data);
return html;
}
pdf.create(build('views/print_templates/pm_export_pdf.ejs',
{rows:resolve(rows, user_rows, table_rows,
subproject_rows, milestone_rows, release_rows)}), pdfconfig)
.toFile(function (err, pdf) {
if (err)
return console.log(err);
res.sendFile(pdf.filename);
});
PDFconfig 是 html-pdf 的配置变量。而resolve 是我自己的 db resolve 函数,在这个故事中不是很相关。
当我在我的 MacBook Pro 上的 OSX 10.10 上本地运行它时,它就像一个魅力。但是当我在我的服务器(centOS)上运行它时,我收到以下错误:
events.js:72
throw er; // Unhandled 'error' event
^
Error: write EPIPE
at errnoException (net.js:904:11)
at Object.afterWrite (net.js:720:19)
这可能与权限有关吗?我不确定我做错了什么..
我运行以下版本:
- 节点:0.10.31
- 快递:4.10.7
- html-pdf:1.2.0
【问题讨论】:
-
您是在服务器上作为独立的 Node 进程运行您的应用程序,还是通过代理/nginx/Apache/...?
-
我使用 nodemon 作为独立进程运行它。我也尝试以 sudo 运行该进程,但没有成功。
-
EPIPE建议一侧(可能是客户端)在文件仍在发送时正在关闭连接。您使用的是 4.10 之前的 Express 版本吗?如果是这样,this issue 可能是导致您的问题的原因。 -
感谢您的努力,我确实已经发现了这个问题,我使用的是 Express 4.10.7 版本。但是,如果这是问题所在,为什么这只会发生在 CentOS 服务器上?我使用与我在本地计算机上使用的所有内容完全相同的版本。
-
OS X 和 Linux 之间的差异足以导致这些问题。您是否尝试过在大型静态(不是由
html-pdf生成)文件上使用res.sendFile(),看看效果是否更好?
标签: javascript node.js pdf sendfile