AMQP 和 Express,设置标头错误



我正在尝试通过"输入"队列在 POST 请求上发送消息,一旦消息被处理并通过"结果"队列发送回,请使用 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})
})
})
});

我错过了什么? 谢谢你的帮助!

我相信错误是由于收到结果后没有关闭频道。

这现在有效:

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})

最新更新