2017-02-13 6 views
0

После включенной CORS на шлюзе API, вот запрос, который я послал к конечной HTTP точке:как я могу получить необработанную строку тела в Lambda (API шлюз Lambda прокси)

$.ajax({ 
     type: 'put', 
     url: 'https://xxxxx.execute-api.us-east-1.amazonaws.com/dev/artist/application/julian_test', 
     data: {params: {param1: "543543", param2: "fdasghdfghdf", test: "yes"}}, 
     success: function(msg){ 
      console.log(msg); 
     }, 
     error: function(msg){ 
      console.log(msg); 
     } 
    }); 

Здесь функция лямбды (Я использую пакет бессерверную узла, и никакие ошибки на код):

module.exports.julian_test = (event, context, callback) => { 
    console.log(event); 
    console.log(event.body); 

var response_success = { 
    statusCode: 200, 
    headers: { 
     "Access-Control-Allow-Origin": "*" 
    }, 
    body: JSON.stringify({ 
     firstUser: { 
      username: "Julian", 
      email: "awesome" 
     }, 
     secondUser: { 
      username: "Victor", 
      email: "hello world" 
     }, 
     thirdUser: { 
      username: "Peter", 
      email: "nice" 
     } 
    }) 
}; 
    callback(null, response_success); 
}; 

console.log (event.body) не выходит из: PARAMS% 5Bparam1% 5D = 543543 & PARAMS% 5Bparam2% 5D = fdasghdfghdf & params% 5Btest% 5D = yes

, который не соответствует формату. Я проверил шаблон преобразования запроса/тела OPTIONS, вот моментальный снимок.

enter image description here

Я пытался удалить "приложения/JSON", но после этого я получаю следующий ответ:

XMLHttpRequest не может загрузить https://xxxxxx.execute-api.us-east-1.amazonaws.com/dev/artist/application/julian_test. Ответ на запрос перед полетом не проходит проверку контроля доступа. Нет заголовка «Access-Control-Allow-Origin» на запрошенном ресурсе. Поэтому исходный 'null' не допускается. В ответе был код состояния HTTP 500.

Кто-нибудь знает, как получить тело запроса строки в фоновом лямбда? Пожалуйста помоги!

ответ

2

Две вещи здесь:

Во-первых, под API шлюза ресурса, перейдите Method Response и убедитесь, что у вас есть ответ на 200 OK отображенной.

Во-вторых, под API шлюза ресурса, перейдите к Integration Request под Body Mapping Templates выберите application/json и введите следующий код в шаблон текстового редактора:

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

    #end 
    }, 
    "queryParams": { 
    #foreach($param in $input.params().querystring.keySet()) 
    "$param": "$util.escapeJavaScript($input.params().querystring.get($param))" #if($foreach.hasNext),#end 

    #end 
    }, 
    "pathParams": { 
    #foreach($param in $input.params().path.keySet()) 
    "$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end 

    #end 
    } 
} 

Когда это применяется, вы можете получить доступ к объекту запроса, как например: (Node.js)

console.log('Body:', event.body); 
    console.log('Headers:', event.headers); 
    console.log('Method:', event.method); 
    console.log('Params:', event.params); 
    console.log('Query:', event.query); 

Взял меня некоторое время, чтобы понять это, реквизит Kenn Brodhagen для объяснения: tutorial

+0

Это на самом деле не позволяет вам перейти к исходной строке запроса, он разбирает его и возвращает его как json. Есть ли способ получить исходную строку, так как мне нужно сделать какой-либо запрос подписи. – CosmicChild

2

Снимок экрана предназначен для метода OPTIONS, который используется для CORS.

Ваш фактический вызов функции лямбда, скорее всего, осуществляется с помощью метода POST. Пожалуйста, проверьте запрос интеграции. Шаблоны сопоставления объектов в методе POST. Если настройка проходит через тело (по умолчанию), тело из вашего запроса на вход должно быть передано Лямбде как есть.

Используйте функцию тестирования в консоли API Gateway, чтобы увидеть, как вход преобразуется в запрос интеграции. Это должно помочь вам отлаживать.