2016-06-08 13 views
7

में कच्चे शरीर का पेलोड कुछ कारणों से मुझे कच्चे शरीर को event के भीतर से कठिन समय मिल रहा है। यह $input.body को application/json सामग्री-प्रकार के लिए जेसन के रूप में लॉग कर रहा है। The docs say that that should contain the raw payload.एडब्ल्यूएस एपीआई गेटवे बॉडी मैपिंग टेम्पलेट

यहाँ मेरी एकता अनुरोध शरीर का मिलान टेम्पलेट:

{ 
    "event": { 
    "body": { 
     "hello": "meow" 
    }, 
    "rawBody": { 
     "hello": "meow" 
    }, 
    "headers": { 
     "Accept": "*/*", 
     "Accept-Encoding": "gzip, deflate", 
     "Accept-Language": "en-US", 
     "Cache-Control": "no-cache", 
     "CloudFront-Forwarded-Proto": "https", 
     "CloudFront-Is-Desktop-Viewer": "true", 
     "CloudFront-Is-Mobile-Viewer": "false", 
     "CloudFront-Is-SmartTV-Viewer": "false", 
     "CloudFront-Is-Tablet-Viewer": "false", 
     "CloudFront-Viewer-Country": "US", 
     "Content-Type": "application/json", 
     "Host": "7nuy7lymef.execute-api.us-east-1.amazonaws.com", 
     "Origin": "file://", 
     "Postman-Token": "0ce7c6f4-3864-c9b4-f2db-739737b2ba49", 
     "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Postman/4.2.2 Chrome/47.0.2526.73 Electron/0.36.2 Safari/537.36", 
     "Via": "1.1 1eea0bca59557555878da4d9775c509f.cloudfront.net (CloudFront)", 
     "X-Amz-Cf-Id": "SDjaGcuJ5eVkOMMCn6M3vGaVicA1fuA7h0bUYE4ARlKupO60eeYNFA==", 
     "X-Forwarded-For": "206.71.230.14, 205.251.250.135", 
     "X-Forwarded-Port": "443", 
     "X-Forwarded-Proto": "https", 
     "x_example_header": "my awesome header" 
    }, 
    "method": "POST", 
    "params": {}, 
    "query": { 
     "example_param": "myawesomeparam" 
    } 
    }, 
    "context": { 
    "callbackWaitsForEmptyEventLoop": false, 
    "logGroupName": "/aws/lambda/reggi-log-post", 
    "logStreamName": "2016/06/08/[$LATEST]aad04e0e46614c288ac8ca43d0a95076", 
    "functionName": "reggi-log-post", 
    "memoryLimitInMB": "128", 
    "functionVersion": "$LATEST", 
    "invokeid": "6e4e1e13-2dc1-11e6-a1f7-4dad3a8eb122", 
    "awsRequestId": "6e4e1e13-2dc1-11e6-a1f7-4dad3a8eb122", 
    "invokedFunctionArn": "arn:aws:lambda:us-east-1:562508364089:function:reggi-log-post" 
    } 
} 
  • इस अनुरोध से कच्चे शरीर का उपयोग करने की कोई तरीका है:

    { 
        "body" : $input.json('$'), 
        "rawBody": $input.body, 
        "headers": { 
        #foreach($header in $input.params().header.keySet()) 
        "$header": "$util.escapeJavaScript($input.params().header.get($header))" #if($foreach.hasNext),#end 
    
        #end 
        }, 
        "method": "$context.httpMethod", 
        "params": { 
        #foreach($param in $input.params().path.keySet()) 
        "$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end 
    
        #end 
        }, 
        "query": { 
        #foreach($queryParam in $input.params().querystring.keySet()) 
        "$queryParam": "$util.escapeJavaScript($input.params().querystring.get($queryParam))" #if($foreach.hasNext),#end 
    
        #end 
        } 
    } 
    

    यहाँ पेलोड उदाहरण है?

  • क्या सभी प्रकारों को स्वीकार करने के लिए सामग्री-प्रकार को बदलने का कोई तरीका है?

उत्तर

0

$input.body में कच्चे पेलोड शामिल हैं। आपको "rawBody": "$input.body" जैसे चारों ओर उद्धरण डालने की आवश्यकता है। अन्यथा शरीर को जेसन दस्तावेज़ के हिस्से के रूप में व्याख्या किया जाएगा।

+0

टिप्पणी होना चाहिए। –

2

निम्नलिखित ब्लॉग पोस्ट विस्तार से बताता है कि इस समस्या को कैसे प्राप्त किया जाए। https://nicholasjackson.io/2016/12/13/using-graphql-with-aws-lambda/

यह विशेष रूप से ग्राफQL के संदर्भ में लिखा गया है, लेकिन यह किसी भी सामग्री प्रकार के लिए काम करेगा। संक्षेप में:

  • बाइनरी सहायता अनुभाग पर जाएं। अपने चुने हुए मीडिया प्रकार के लिए बाइनरी समर्थन सक्षम करें और सहेजें।
  • संसाधन अनुभाग में अपनी विधि पर लौटें और एकीकरण अनुरोध खोलें। जोड़ें/अपनी चुनी सामग्री प्रकार के लिए शरीर मानचित्रण टेम्पलेट संपादित करें और निम्न डाल:

    "rawBody": "$util.escapeJavaScript($util.base64Decode($input.body))"

  • सहेजें और एपीआई पुनर्वितरित।

बाइनरी समर्थन जोड़ना बेस 64 स्ट्रिंग के रूप में अनुरोध को एन्कोड करता है। शरीर मैपिंग टेम्पलेट इसे डीकोड करता है।

संबंधित मुद्दे