Поток не заканчивается (ответ не отправляется) - PullRequest
1 голос
/ 17 апреля 2020

У меня есть это, которое так близко к работе:

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} для обоих вызовов канала, но это не помогло.

1 Ответ

1 голос
/ 17 апреля 2020

Я понял, это потому, что я должен делать это:

req.pipe(k.stdin);
k.stdout.pipe(res);

вместо этого:

req.pipe(k.stdin).pipe(res);

Я сомневаюсь, что явное {end: true} необходимо в в этом случае, но я не проверял это без.

...