2016-06-08 17 views
7

Vì một lý do nào đó, tôi gặp khó khăn khi lấy phần thô từ bên trong event. Đang ghi nhật ký $input.body là json cho loại nội dung application/json. The docs say that that should contain the raw payload.Tải trọng cơ thể nguyên bản trong Mẫu Bản đồ Thân máy của Cổng AWS API

Đây Integration tôi Request Body Mapping mẫu:

{ 
    "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 
    } 
} 

Dưới đây là ví dụ tải trọng:

{ 
    "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" 
    } 
} 
  • Có cách nào để truy cập vào cơ thể thô từ yêu cầu này?
  • Có cách nào để thay đổi loại nội dung để chấp nhận tất cả các loại không?

Trả lời

0

$input.body chứa tải trọng thô. Bạn cần đặt dấu ngoặc kép xung quanh nó như "rawBody": "$input.body". Nếu không, nội dung sẽ được hiểu là một phần của tài liệu json.

+0

phải là nhận xét. –

2

Bài đăng trên blog sau đây giải thích chi tiết cách giải quyết vấn đề này. https://nicholasjackson.io/2016/12/13/using-graphql-with-aws-lambda/

Được viết cụ thể trong ngữ cảnh của GraphQL, nhưng nó sẽ hoạt động đối với bất kỳ loại nội dung nào. Tóm lại:

  • Đi tới phần Hỗ trợ nhị phân. Bật hỗ trợ nhị phân cho loại phương tiện bạn đã chọn và lưu.
  • Quay lại phương thức của bạn trong phần Tài nguyên và mở Yêu cầu tích hợp. Thêm/chỉnh sửa cơ thể mẫu bản đồ cho kiểu nội dung của bạn được lựa chọn và đặt như sau:

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

  • Lưu và triển khai lại các API.

Thêm hỗ trợ nhị phân mã hóa yêu cầu dưới dạng chuỗi base64. Mẫu ánh xạ cơ thể giải mã nó.

Các vấn đề liên quan