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
したがって、本文は解析され、そのコンテンツタイプはサポートされていないため、結果は{}になります。
text / plainリクエストの本文を取得するには、 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)}