【发布时间】:2020-07-11 15:59:33
【问题描述】:
我在 python 中创建了一个 Lambda 函数,在这个函数中我放置了带有跨源详细信息的标题。这是我的 Lambda 函数的代码:
def lambda_handler(event, context):
data=''
s3_boto = boto3.client('s3')
s3 = boto3.resource('s3')
reference_elements = event['data1']
test_elements = event['data2']
try:
#access first event object
imagePath = []
data= compute_data(reference_elements, test_elements)
return response({'message': data}, 200)
except Exception as e:
return e
return response({'message': data}, 200)
def response(message, status_code):
return {
'statusCode': str(status_code),
'body': json.dumps(message),
'headers': {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
"Access-Control-Allow-Methods": "OPTIONS,POST,GET"
},
}
现在我已经使用 POST 方法创建了一个 AWS API 网关并启用了 CORS。然后我部署了这个 API。 当我从 Postman 运行这个 API 时,它工作正常。 但是一旦我尝试从我的 React JS 代码中获取这个 API,它就会抛出以下错误: enter image description here
这是我在按钮点击中的 React Js 代码:
let postData = {"key1":"value1","key2":"value2","key3":"value3"}
const requestOptions = {
method: "POST",
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Headers": "*"
},
body: JSON.stringify(postData)
}
const url =
"https://apiId.execute-api.us-east-1.amazonaws.com/apiFunctionName"
fetch(url, requestOptions)
.then(response => console.log(response))
.then(data => console.log(data))
请纠正我哪里出错了,我已经投入了大量时间进行反复试验,但没有运气。
【问题讨论】:
-
你能看看你的
OPTIONSpreflight 调用是否获得了 200 和正确的 CORS 标头? -
`"Access-Control-Allow-Headers": "*" 是一个 response 标头,它在请求中没有位置。
-
我也尝试过 'Access-Control-Allow-Origin': '*',在请求中,仍然没有成功
-
@Quentin 想说的是所有
Access-Control-Allow标头都是响应标头。不要在请求中发送它们 -
是的,我已经删除了那部分。现在我的 javascript 请求代码如下所示:
const requestOptions = { method: "POST", headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" }, body: JSON.stringify(postData) } const url = "https://awsId.us-east-1.amazonaws.com/calculateHomography" fetch(url, requestOptions) .then(response => console.log(response.json())) .then(data => console.log(data))但我仍然遇到同样的问题
标签: javascript reactjs aws-lambda aws-api-gateway es6-promise