我正在使用node + express + IronMQ,我遇到了一个小问题。
在我的express.js POST回调中,我得到{}作为请求体,但我确信消息内容是从我的IronMQ消息队列中推送的。
任何提示?
答案 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)}