我正在玩 node + express + IronMQ,但遇到了一个小问题。
在我的 express.js POST 回调中,我将 {} 作为请求正文,但我确定消息内容是从我的 IronMQ 消息队列中推送的。
有什么提示吗?
好的,我已经找到了问题的原因及其解决方案。所以回答我自己的问题:
问题:
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
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)}