【发布时间】:2017-11-28 00:53:16
【问题描述】:
我正在尝试使用 AWS Lambda 为应用程序编写无服务器后端,但遇到了标题中的错误。使用 API Gateway 代理集成进行测试时会出现错误,但在 Lambda 控制台中测试时该函数可以正常工作。
这是错误:
{
"errorMessage":"string indices must be integers",
"errorType":"TypeError",
"stackTrace":[
[
"/var/task/auth_login.py",
17,
"lambda_handler",
"response = get_user(payload)"
],
[
"/var/task/shifty_utils/__init__.py",
22,
"get_user",
"table = dynamo.Table(user['company'] + '_users')"
]
]
}
这是它发生位置的上下文:
def lambda_handler(event, context):
payload = event['body']
response = get_user(payload)
def get_user(user):
try:
table = dynamo.Table(user['company'] + '_users')
response = table.get_item(
Key={
'userId': user['userId'],
'position': user['position']
}
)
except ClientError as e:
print(e.response['Error']['Message'])
return {'message': e.response['Error']['Message']}
else:
return response
基本上,代理集成似乎将事件对象作为 JSON 格式的字符串读取,而不是 dict,但如果我为此调整代码会发生以下情况:
{
"errorMessage":"the JSON object must be str, bytes or bytearray, not 'dict'",
"errorType":"TypeError",
"stackTrace":[
[
"/var/task/auth_login.py",
15,
"lambda_handler",
"payload = json.loads(event)"
],
[
"/var/lang/lib/python3.6/json/__init__.py",
348,
"loads",
"'not {!r}'.format(s.__class__.__name__))"
]
]
}
我赢不了。任何帮助表示赞赏。
【问题讨论】:
标签: python aws-lambda aws-api-gateway serverless-framework