2017-12-26 108 views
9

Tôi đang cố gắng lấy phần thân của yêu cầu Amazon SNS nhưng nó được trả về như một đối tượng. Tôi có thể nhận được các tiêu đề từ yêu cầu mà không có bất kỳ vấn đề gì. (Req.header ('x-AMZ-SNS-tin-type'))Lấy phần thân yêu cầu POST (Amazon SNS) trong Nodejs

var msgBody = req.body.Message; 

Biến msgBody được trả về như một đối tượng mà tôi mong đợi để nhận được giá trị chuỗi từ yêu cầu.

Tôi đang sử dụng nhanh và cơ thể phân tích cú pháp với các tùy chọn sau:

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

Định dạng theo yêu cầu như sau (rút ngắn cho dễ đọc):

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

Đầu ra của 'console.log (typeof req.body.Message)' là gì? – Anuruddha

Trả lời

0

Các "Message" mà bạn đang tìm kiếm là một phần của JSON được xâu chuỗi trong yêu cầu của bạn.

Bạn sẽ có thể truy cập nó bằng cách sử ...

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

Tôi đã thử nó nhưng nó mang lại cho tôi "u token bất ngờ trong json ở vị trí 0". req chính nó chắc chắn được xác định vì tôi có thể truy cập các tiêu đề. –

+0

Có gì trong 'req.body'? – dashmug

+0

có một đối tượng. nó cho đối tượng {} khi bàn điều khiển được ghi lại. –

3

console.log("stringified json") sẽ phân tích chuỗi JSON trước khi in nó ra cửa sổ Console. Tuy nhiên, nếu bạn kiểm tra các typeof req.body.Message bạn sẽ thấy nó như là loại chuỗi như mong đợi.

console.log(typeof req.body.Message)

Đó là console.log() phương pháp thực hiện chuyển đổi phía sau nhìn thấy.

nếu bạn cần, bạn có thể sử dụng JSON.stringify({your json object}) để nhận phiên bản đã được xâu chuỗi của các đối tượng.

Dưới đây là mã (index.js) để mô phỏng trường hợp của bạn với tải trọng yêu cầu được cung cấp trong câu hỏi.

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!')) 
Các vấn đề liên quan