Нужно разобрать SQS сообщение - PullRequest
0 голосов
/ 12 февраля 2019

У меня возникают некоторые проблемы с анализом моего сообщения AWS SQS при получении сообщения.

Моя главная проблема заключается в том, что, хотя оно выглядит как строка, оно также хочет действовать как объект.

Пока что я просто пытался разобрать сообщение, так что было много console.log() и typeof.

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
 }     
});

1:

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

2:

string

3:

{ MessageId: '2afe328d-0b23-4f21-82c5-47563cd994ef',
  ReceiptHandle: 
'AQEB4Giu1whgf6He9cJZVCNBzyfbIPPWlS5HOMLwsyC2lLODJbOudVIdLAx0R9U//XHP9CFr1xhycGzdFXPM1gkHRFf004G1AyqkuB1VPRd/RoQGDcJ9yiKw94b6L7i4VWqbCGdr0Dnz0IMw7ze+C69lE1+TD02L28crHscx+IuWdGKpFq79lOJjpbXfmYv4LP/m1fG3aWyRphKkgtFT/eOCpzqLbGn1Gq6h8RBxo7rexGW5SiNw9F/gVPVTpAWuJolOXv9duAzu8FF7rMnBl2bFjEbLirDtg1RwZtXdG64YsJF2pVwlWrAsx26W06GJocXI',
  `MD5OfBody: '1441a7909c087dbbe7ce59881b9df8b9',`
  `Body: '[object Object]' } `

I 'Я не уверен, что я делаю неправильно, а также почему он работает неправильно.В Body сообщения есть только два свойства: электронная почта и токен.Я хочу получить доступ к обоим.

Что касается ожидаемого результата, я ожидаю, что смогу получить доступ к электронной почте, выполнив console.log(messages.Messages[i].Body.email), и оно должно быть равно john.doe@example.com.

1 Ответ

0 голосов
/ 12 февраля 2019

Чтобы воспроизвести вашу ситуацию, я сделал следующее:

  • Создал очередь 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.

...