如何向AWS Lambda GET请求传入参数?React调用遇KeyError问题处理
问题描述
我通过API Gateway配置了AWS Lambda,该Lambda从event JSON中获取SeriesId值并使用它,Lambda代码如下:
import json import boto3 from boto3.dynamodb.conditions import Key dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('TV-App-Seasons') def lambda_handler(event, context): seriesId = int(event["SeriesId"]) response = table.query(KeyConditionExpression=Key("SeriesId").eq(seriesId)) data = response['Items'] return { 'statusCode': 200, 'body': data }
使用以下测试事件JSON可正常运行:
{ "SeriesId": 0 }
但在React中发送GET请求时无法正确传入参数(GET请求无法携带请求体)。我在Postman中用路径参数URL/Seasons?SeriesId=0可以正常工作,但React调用时出现KeyError。React代码如下:
function getSeasons(seriesId: number) { const response = fetch("URL/stage/Seasons?SeriesId=" + seriesId, { method: "GET", headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' } }) .then([...]); }
KeyError信息:
{ errorMessage: "'SeriesId'", errorType: 'KeyError', requestId: '1a71a2d3-8c37-475d-8672-2958e3c84ca1', stackTrace: Array(1) }
我反复检查过URL,问题不在这。根据资料尝试把seriesId = int(event["SeriesId"])改成seriesId = int(event["pathparameters"]["SeriesId"]),但还是报KeyError,连测试事件也无法正常运行了。
奇怪的是,这个请求在Postman和浏览器里都能正常工作,只有React不行。我还有另一个不需要event JSON的Lambda,Postman和React都能正常调用,CORS也已经启用,实在找不到问题所在。
解决方法
将Lambda/API Gateway设置为代理模式,之后就可以从queryStringParameters中读取SeriesId。配置完成后,只需稍微重构React代码以处理预检CORS响应,问题就解决了。
内容的提问来源于stack exchange,提问作者JasperMW
相关产品推荐
相关产品推荐

