需要解析SQS消息

时间:2019-02-12 02:59:34

标签: node.js amazon-web-services amazon-sqs

收到消息时,我在解析我的AWS SQS消息时遇到了一些麻烦。

我的主要问题是,尽管它似乎有点像字符串,但它也想像对象一样。

到目前为止,我一直在尝试解析消息,因此它涉及很多[global] target = /usr/local/lib/python2.7/site-packages console.log()

typeof

1:

sqs.receiveMessage(params, (err, data) => {
 if (err) console.log(err, err.stack); 
 else {
  messages = data; 
  console.log(typeof messages.Messages[2].Body); // #2
  let validMessage = JSON.parse(messages.Messages[2].Body); // #1
  console.log(`validMessage: ${validMessage}`); // Just doesn't print out
  console.log(typeof validMessage); // Errorr with #1 
  console.log(messages.Messages[2]); // gives #3 below
 }     
});

2:

SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse (<anonymous>)

3:

string

我不确定我在做什么错,以及为什么它不能正常工作。邮件的{ MessageId: '2afe328d-0b23-4f21-82c5-47563cd994ef', ReceiptHandle: 'AQEB4Giu1whgf6He9cJZVCNBzyfbIPPWlS5HOMLwsyC2lLODJbOudVIdLAx0R9U//XHP9CFr1xhycGzdFXPM1gkHRFf004G1AyqkuB1VPRd/RoQGDcJ9yiKw94b6L7i4VWqbCGdr0Dnz0IMw7ze+C69lE1+TD02L28crHscx+IuWdGKpFq79lOJjpbXfmYv4LP/m1fG3aWyRphKkgtFT/eOCpzqLbGn1Gq6h8RBxo7rexGW5SiNw9F/gVPVTpAWuJolOXv9duAzu8FF7rMnBl2bFjEbLirDtg1RwZtXdG64YsJF2pVwlWrAsx26W06GJocXI', `MD5OfBody: '1441a7909c087dbbe7ce59881b9df8b9',` `Body: '[object Object]' } ` 中只有两个属性,即电子邮件和令牌。我要访问两者。

关于预期结果,我希望能够通过执行Body来访问电子邮件,并且该电子邮件应等于console.log(messages.Messages[i].Body.email)

1 个答案:

答案 0 :(得分:0)

为了重现您的情况,我做了以下事情:

  • 创建了Amazon SQS队列
  • 使用aws sqs send-message --queue-url ... --message-body foobar将消息发送到队列
  • 通过代码检索消息

我是Python人,而不是Node,但这应该是相同的基本思想:

import boto3

client=boto3.client('sqs',region_name='ap-southeast-2')

response = client.receive_message(QueueUrl='https://sqs.ap-southeast-2.amazonaws.com/743112987576/stack')
print (response)
print (response['Messages'][0]['Body'])

格式化的response是:

{
    u'Messages': [
        {
            u'Body': 'foobar', 
            u'ReceiptHandle': '...', 
            u'MD5OfBody': '...', 
            u'MessageId': '...'
        }
    ], 
    'ResponseMetadata': {...}
}

最终输出为foobar

Node SDK处理事情的方式可能有所不同,您可能需要将字符串转换为JSON对象。