Ошибка CORS только с API Gateway и Lambda ** ** при использовании Proxy Integration - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь добавить элемент в DynamoDB по запросу поста от шлюза API с использованием Lambda.

Вот так выглядит мой лямбда-код:

var AWS = require('aws-sdk');
var dynamoDB = new AWS.DynamoDB();

exports.handler = (event, context, callback) => {
var temp_id = "1";
var temp_ts = Date.now().toString();
var temp_calc = event['params']['calc'];

var params = {
    TableName:"calc-store",
    Item: {
        Id: {
            S: temp_id
        },
        timestamp: {
            S: temp_ts
        },
        calc: {
            S: temp_calc
        }
    }
};
dynamoDB.putItem(params,callback);


const response = {
    statusCode: 200,
    headers: {
        'content-type': 'application/json',
        'Access-Control-Allow-Origin': '*' 
    },
    body: event['params']['calc']
};

callback(null, response); 
};

Вот как яя вызываю функцию из моего клиента

axios.post(apiURL, {params:{calc:calc}})
.then ((res) => {
  console.log(res);
})

Я включил CORS более 30 раз на своем API-шлюзе, и я также дважды проверил, добавив заголовки к ответу.Но независимо от того, что я делаю, я получаю сообщение об ошибке CORS и по какой-то причине в своем ответе вижу, что заголовок «Access-Control-Allow-Origin» не добавляется.

POST https://egezysuta5.execute-api.us-east-1.amazonaws.com/TEST 502
localhost/:1 Failed to load https://egezysuta5.execute-api.us-east- 
1.amazonaws.com/TEST: No 'Access-Control-Allow-Origin' header is 
present on the requested resource. Origin 'http://localhost:3000' is 
therefore not 
allowed access. The response had HTTP status code 502.
createError.js:17 Uncaught (in promise) Error: Network Error
at createError (createError.js:17)
at XMLHttpRequest.handleError (xhr.js:87)

Я пытался не использовать Lambda Proxy Integration, и тогда это сработало, однако я не смог получить доступ к передаваемым параметрам.

РЕДАКТИРОВАТЬ: Потратив на это несколько часов, я решил проблему.Мой клиент делает успешный предполетный запрос на ВАРИАНТЫ.OPTIONS успешно возвращает правильные заголовки CORS, но по какой-то причине они не передаются моему запросу POST!

EDIT2: (Это не решает проблему) Если я изменяюв теле ответа на строку ошибки нет !!Что-то не так с

event['params]['calc']

1 Ответ

0 голосов
/ 06 октября 2018

Ваша проблема с потоком кода.Обычно вы не ждете завершения putItem до выполнения обратного вызова ... Попробуйте это ...

dynamoDB.putItem(params,(err,data) => {
if(err){

  return callback(err, null)

}

const response = {
    statusCode: 200,
    headers: {
        'content-type': 'application/json',
        'Access-Control-Allow-Origin': '*' 
    },

    body: JSON.parse(event.body).calc
};

return callback(null, response); 

});
...