AMQP и Express, ошибка установки заголовков - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь отправить сообщение по запросу POST через очередь «input», и как только сообщение будет обработано и отправлено обратно через очередь «results», ответьте res.json ().

Это работает в первый раз, но при втором запросе POST, после получения результатов, выдается ошибка:

Error: Can't set headers after they are sent.

Код выглядит так:

const connection = cb => {
  amqp.connect(amqp_uri, (err, conn) => {
    if (err) {
      throw new Error(err)
    }
    cb(conn)
  })
}

router.post('/', (req, res) => {
  const input = JSON.stringify(req.body);
  const queueToSend = "input";
  const queueToReceive = "results";

  connection(conn => {
    let results = null;
    conn.createChannel((err, ch) => {
      if (err) {
        throw new Error(err)
      }

      ch.assertQueue('input', {durable: false});
      ch.assertQueue('results', {durable: false})

      ch.sendToQueue('input', new Buffer(input));

      ch.consume('results', (msg) => {
        ch.ack(msg)
        results = JSON.parse(msg.content);
        console.log('received results');
        res.json(results);
      }, {noAck: false})
    })
  })
});

Что мне не хватает?Спасибо за помощь!

1 Ответ

0 голосов
/ 05 июня 2018

Я полагаю, что ошибка произошла из-за не закрытия канала после получения результатов.

Теперь это работает:

ch.consume('results', (msg) => {
        ch.ack(msg)
        results = JSON.parse(msg.content);
        console.log('received results');
        res.json(results);
        ch.close(function() {conn.close()}) // <---
      }, {noAck: false})
...