Я реализую механизм опроса для реагирующего приложения с использованием 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