2017-12-26 9 views
9

Amazon SNS 요청의 본문을 가져 오려고하지만 객체로 반환됩니다. 나는 문제없이 헤더를 얻을 수있다. (req.header ('X-AMZ-SNS 메시지 형'))Nodejs에서 POST 요청 (Amazon SNS)의 본문 가져 오기

var msgBody = req.body.Message; 

은 msgBody 변수는 내가 요청에서 문자열 값을 얻을 것으로 예상 객체로 반환됩니다.

나는 다음과 같은 옵션을 명시하고 몸 파서를 사용하고 다음과 같이

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 

요청 형식 (읽기 쉽게 단축)되어

POST /createLog/slackLogSNS/ HTTP/1.1 
x-amz-sns-message-type: Notification 
x-amz-sns-message-id: 3f71e0db-a9b1-5092-96f4-b26015676ba0 

{ 
    "Type" : "Notification", 
    "MessageId" : "3f71e0db-a9b1-5092-96f4-b26015676ba0", 
    "TopicArn" : "arn:aws:sns:us-east-2:043886476179:testslackSNS", 
    "Subject" : "hghghgfhgfhg", 
    "Message" : "{\n \"Type\" : \"Notification\",\n \"MessageId\" : \"22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324\",\n \"TopicArn\" : \"arn:aws:sns:us-west-2:123456789012:MyTopic\",\n \"Subject\" : \"My First Message\",\n \"Message\" : \"Hello world!\",\n \"Timestamp\" : \"2012-05-02T00:54:06.655Z\",\n \"SignatureVersion\" : \"1\",\n \"Signature\" : \"EXAMPLEw6JRNwm1LFQL4ICB0bnXrdB8ClRMTQFGBqwLpGbM78tJ4etTwC5zU7O3tS6tGpey3ejedNdOJ+1fkIp9F2/LmNVKb5aFlYq+9rk9ZiPph5YlLmWsDcyC5T+Sy9/umic5S0UQc2PEtgdpVBahwNOdMW4JPwk0kAJJztnc=\",\n \"SigningCertURL\" : \"https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem\",\n \"UnsubscribeURL\" : \"https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96\"\n}", 

    } 
} 
+0

'console.log (typeof req.body.Message)'의 결과는 무엇입니까? – Anuruddha

답변

0

"메시지를"당신을 찾고있는 문자열로 된 JSON의 일부입니다.

당신은 사용하여 액세스 할 수 있어야합니다 ...

const msgBody = JSON.parse(req.body.Message).Message; 
+0

나는 그것을 시험해 보았다. 그러나 그것은 나에게 "위치 0에있는 json에서 예상치 못한 토큰 u"를 준다. 헤더에 액세스 할 수 있기 때문에 req 자체가 명확하게 정의됩니다. –

+0

'req.body'에 무엇이 있습니까? – dashmug

+0

개체가 있습니다. 콘솔이 기록 될 때 객체 {}를 제공합니다. –

3

console.log("stringified json")는 콘솔에 인쇄하기 전에 JSON 문자열을 구문 분석합니다. 그러나 typeof req.body.Message을 확인하면 예상대로 문자열 유형으로 표시됩니다.

console.log(typeof req.body.Message)

IT는 볼 뒤에 변환을하고있는을 console.log() 메소드입니다.

JSON.stringify({your json object})을 사용하면 개체의 문자열 버전을 얻을 수 있습니다.

다음은 질문에서 제공된 요청 페이로드를 사용하여 사례를 시뮬레이트하는 코드입니다 (index.js).

const express = require('express') 
const bodyParser = require('body-parser') 
const app = express() 
app.use(bodyParser.json()); // for parsing application/json 
app.use(bodyParser.urlencoded({ extended: true })); // for parsing 

app.post('/', function(req, res) { 
    // get posts 
    console.log(req.body); 
    var x = req.body.Message; 
    console.log(typeof req.body.Message) // string 
    console.log(x.Type) // undefined 
    res.json({"a" : "test response"}) 
}); 

app.listen(3000,() => console.log('Example app listening on port 3000!')) 
관련 문제