3

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

在我的 express.js POST 回调中,我将 {} 作为请求正文,但我确定消息内容是从我的 IronMQ 消息队列中推送的。

有什么提示吗?

4

2 回答 2

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

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

解决方案:

为了获得我的文本/普通请求的正文,我必须自己解析它,如https://stackoverflow.com/a/9920700

于 2013-01-24T00:33:47.977 回答
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)}

这是github上的相关更改

于 2014-03-06T00:51:49.543 回答