HTTP请求期间的RabbitMQ事件上的Express.js – res.send()?

我在我的网站上进行用户注册。

exports.regitser = (req, res)-> user = unique_id : "RANDOM_HASH" name : escape(req.body.name) pass : escape(req.body.pass) ... # registrations starts here 

在这一刻我需要推送数据到RabbitMQ交换,并等待在单独的队列"reg_results"响应。 当我在unique_id="RANDOM_HASH" "reg_results ”中收到消息后,似乎这个用户(对于这个HTTP请求)的注册成功完成,现在我可以给客户端res.send("You are registered!")

在继续来自客户端的HTTP请求的情况下处理这种模式的最好方法是什么?

提前致谢。

这相当简单。 你需要了解的主要是register(req,res)在函数完成时不必为res提供结果。 结果可以在任何时候发送。 所以,对于你的代码,这将是沿线的东西

 exports.register = (req, res)-> user = ... # registrations starts here //send your registration message here app.resultsQueue.subscribe (msg) -> if (msg is mine) res.render(msg) 

使用某种带有超时的Promise (在注册消息未在给定时间内到达的情况下)使代码更整齐可能是有意义的。

那么你的代码将是(我将切换到JavaScript)

 # registrations starts here var deferred = Q.defer(); deferred.promise.timeout(5000).then(function (msg) { if (typeof msg == "Error") //handle timeout else res.render(msg) }); app.resultsQueue.subscribe (function(msg) { if (msg is mine) deferred.resolve(msg); });