我有这个,很贴心:
app.post('/html-to-pdf', (req,res,next) => {
log.info('got request to convert html to pdf...');
const k = cp.spawn('pandoc', ['-f', 'html','--pdf-engine=xelatex','-t','latex']);
req.pipe(k.stdin, {end: true}).pipe(res, {end:true});
k.stdout.on('data', d => {
console.log('stdout:', String(d));
});
res.on('data', d => {
console.log('data:',d);
});
});
我可以使用以下方式发送路线html:
$ curl -d '<html>hiiii</html>' -X POST localhost:3701/html-to-pdf
服务器将获取数据,并将其转换,此处理程序将打印正确的信息:
k.stdout.on('data', d => {
console.log('stdout:', String(d)); // logs "hiiii"
});
但是问题是响应永远不会发送!它永远挂着。如您所见,我在两个管道调用中都使用了{end:true},但这没有帮助。
我知道了,这是因为我应该这样做:
req.pipe(k.stdin, {end: true});
k.stdout.pipe(res, {end:true});
代替此:
req.pipe(k.stdin, {end: true}).pipe(res, {end:true});
我怀疑在这种情况下是否需要显式的{end:true},但我没有进行测试。