从Node.JS / Express.JS读取时,IronMQ从推送队列中清空消息体

时间:2013-01-24 00:33:48

标签: node.js express iron.io ironmq

我正在使用node + express + IronMQ,我遇到了一个小问题。

在我的express.js POST回调中,我得到{}作为请求体,但我确信消息内容是从我的IronMQ消息队列中推送的。

任何提示?

2 个答案:

答案 0 :(得分:2)

好的,我找到了问题的原因及其解决方案。所以回答我自己的问题:

问题:


1)我从IronMQ推送队列(http://dev.iron.io/mq/reference/push_queues/)收到POST消息,其内容类型为text / plain。

2)我正在使用connect.js中间件(express.connect),它只解析application / json,application / x-www-form-urlencoded和multipart / form-data。 http://www.senchalabs.org/connect/bodyParser.html

因此正在解析正文,并且由于不支持其内容类型,结果为{}

解决方案:

为了获取我的text / plain请求的正文,我必须自己解析它,如https://stackoverflow.com/a/9920700

答案 1 :(得分:1)

IronMQ现在已更新其推送队列以发送自定义标头。如果在创建队列时将标题设置为“Content-Type”:订阅者列表中的“application / json”,则正确解析正文。例如

# update groups queue
payload =
  subscribers: [
    {
      url: "#{process.env.ROOT_URL}/groups/update"
      headers:
        'Content-Type': 'application/json' # this fixes request parsing issue
    }
  ]
  push_type: 'multicast'
  retries: 3
  retries_delay: 10
  error_queue: 'groups_errors'

url = "https://mq-aws-us-east-1.iron.io/1/projects/#{process.env.IRON_MQ_PROJECT_ID}/queues/groups"

headers =
  'Authorization': "OAuth #{process.env.IRON_MQ_TOKEN}"
  'Content-Type': 'application/json'

result = HTTP.post url, {headers: headers, content: JSON.stringify(payload)}

Here's the relevant change on github