2017-12-26 68 views
9

मैं एक अमेज़ॅन एसएनएस अनुरोध का शरीर प्राप्त करने की कोशिश कर रहा हूं लेकिन इसे किसी ऑब्जेक्ट के रूप में वापस कर दिया गया है। मैं बिना किसी समस्या के हेडर को अनुरोध से प्राप्त कर सकता हूं। (Req.header ('एक्स-AMZ-एसएनएस-संदेश-प्रकार'))नोडजेस में POST अनुरोध (अमेज़ॅन एसएनएस) का शरीर प्राप्त करना

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

"संदेश" है कि आप आपके अनुरोध में स्ट्रिंग जेएसओएन का हिस्सा तलाश रहे हैं।

आप का उपयोग कर इसे उपयोग करने में सक्षम होना चाहिए ...

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

मैंने कोशिश की लेकिन यह मुझे "स्थिति 0 पर जेसन में अप्रत्याशित टोकन" देता है। req स्वयं निश्चित रूप से परिभाषित किया गया है क्योंकि मैं हेडर तक पहुंच सकता हूं। –

+0

'req.body' में क्या है? – dashmug

+0

एक वस्तु है। जब कंसोल लॉग होता है तो यह ऑब्जेक्ट {} देता है। –

3

console.log("stringified json") कंसोल के लिए यह मुद्रण से पहले JSON स्ट्रिंग पार्स होगा। हालांकि यदि आप typeof req.body.Message चेक करते हैं तो आप इसे अपेक्षित स्ट्रिंग प्रकार के रूप में देखेंगे।

console.log(typeof req.body.Message)

यह 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!')) 
संबंधित मुद्दे