【问题标题】:IronMQ empty message body from push queue when read from Node.JS / Express.JS从 Node.JS / Express.JS 读取时,IronMQ 会从推送队列中清空消息体
【发布时间】:2014-03-06 08:51:49
【问题描述】:

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

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

有什么提示吗?

【问题讨论】:

    标签: node.js express iron.io ironmq


    【解决方案1】:

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

    问题:


    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 那样自己解析它

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        猜你喜欢
        • 2021-03-11
        • 2021-03-26
        • 1970-01-01
        • 2013-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-22
        • 1970-01-01
        相关资源
        最近更新 更多