AWS Структура события Lambda получает полный запрос от шлюза API с использованием Ax ios в приложении React - PullRequest
0 голосов
/ 06 мая 2020

Я реализую механизм опроса для реагирующего приложения с использованием ax ios для публикации в API, который запускает лямбда-функцию из AWS.

Та же самая лямбда-функция запускается тем же API из приложение Android, и все работает так, как должно. Прямо сейчас функция Lambda выводит в журналы только event.

Это событие из приложения Android выглядит в журналах следующим образом:

{'hr': '[67, 67, 69, 70, 66, 67, 68, 72, 71, 72]'}

Но когда Я отправляю сообщение из приложения React с помощью ax ios Я получаю следующее:

{'resource': '/qmed_data_feed', 'path': '/qmed_data_feed', 'httpMethod': 'OPTIONS', 'headers': {'accept': '/', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'en,es-AR;q=0.9,es;q=0.8,es-PY;q=0.7,en-US;q=0.6', 'access-control-request-headers': 'content-type', 'access-control-request-method': 'POST', 'Host': '2osztvec25.execute-api.us-east-2.amazonaws.com', 'origin': 'http://localhost:3000', 'referer': 'http://localhost:3000/', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'cross-site', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36', 'X-Amzn-Trace-Id': 'Root=1-5eb222b9-dee35fb587d5ed0083dc8600', 'X-Forwarded-For': '181.94.228.87', 'X-Forwarded-Port': '443', 'X-Forwarded-Proto': 'https'}, 'multiValueHeaders': {'accept': ['/'], 'accept-encoding': ['gzip, deflate, br'], 'accept-language': ['en,es-AR;q=0.9,es;q=0.8,es-PY;q=0.7,en-US;q=0.6'], 'access-control-request-headers': ['content-type'], 'access-control-request-method': ['POST'], 'Host': ['2osztvec25.execute-api.us-east-2.amazonaws.com'], 'origin': ['http://localhost:3000'], 'referer': ['http://localhost:3000/'], 'sec-fetch-dest': ['empty'], 'sec-fetch-mode': ['cors'], 'sec-fetch-site': ['cross-site'], 'User-Agent': ['Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'], 'X-Amzn-Trace-Id': ['Root=1-5eb222b9-dee35fb587d5ed0083dc8600'], 'X-Forwarded-For': ['181.94.228.87'], 'X-Forwarded-Port': ['443'], 'X-Forwarded-Proto': ['https']}, 'queryStringParameters': None, 'multiValueQueryStringParameters': None, 'pathParameters': None, 'stageVariables': None, 'requestContext': {'resourceId': 'x2sz4i', 'resourcePath': '/qmed_data_feed', 'httpMethod': 'OPTIONS', 'extendedRequestId': 'MFpdBFRViYcF60Q=', 'requestTime': '06/May/2020:02:36:41 +0000', 'path': '/default/qmed_data_feed', 'accountId': '262418700729', 'protocol': 'HTTP/1.1', 'stage': 'default', 'domainPrefix': '2osztvec25', 'requestTimeEpoch': 1588732601628, 'requestId': 'ef1a6730-3fb3-4262-8a64-8492c2c26eeb', 'identity': {'cognitoIdentityPoolId': None, 'accountId': None, 'cognitoIdentityId': None, 'caller': None, 'sourceIp': '181.94.228.87', 'principalOrgId': None, 'accessKey': None, 'cognitoAuthenticationType': None, 'cognitoAuthenticationProvider': None, 'userArn': None, 'userAgent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36', 'user': None}, 'domainName': '2osztvec25.execute-api.us-east-2.amazonaws.com', 'apiId': '2osztvec25'}, 'body': None, 'isBase64Encoded': False}

, а основной ключ пуст: 'body': None,

Я тестировал Api с помощью тестера api, и он также работал отлично.

Это мой код для публикации с помощью Ax ios:

import { useState, useEffect } from 'react';
import axios from 'axios';


const payload = {
  command: "get",
  user: "000"
}

export const useLambdaApi = () => {
  const [data1, updateData1] = useState([]);
  const api = 'https://2osztvec25.execute-api.us-east-2.amazonaws.com/default/qmed_data_feed';
  useEffect(() => {
    const fetchData = async () => {
      try{
        let result = {};
        result = await axios.post(api, payload);
        console.log(result)
      } catch (error){
        console.log("ERROR",error);
      }
    }
    fetchData();
  },[]);
  return [data1, updateData1];
}

Заранее благодарим за любую помощь.

EDIT

Итак , ответ, который я получаю в приложении реакции, выглядит следующим образом:

Access to XMLHttpRequest at '<apiURL>' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Я знаю, что это может быть проблема с заголовками, но это только потому, что функция лямбда не работает с ключевой ошибкой и не вернуть заголовки. Проблема заключается в содержимом запроса, отправленном приложением React

...