#javascript #node.js #typescript #aws-api-gateway #amazon-api-gateway
Вопрос:
Я пытаюсь использовать DynamoDB с API-шлюзом, но это не работает. Это то, что я пытаюсь сделать
export async function handler(event: APIGatewayProxyEvent, context: Context): Promise<APIGatewayProxyResult> {
switch (event.httpMethod) {
case "GET":
var params = {
TableName: 'Users',
Key: {
UserID: event.queryStringParameters.UserID
}
};
dynamodb.get(params, function (err, data) {
if (err){
return{
statusCode: 200,
body: JSON.stringify({
message: "Item not found"
})
}
} else {
return {
statusCode: 200,
body: JSON.stringify({
message: data.Item,
})
};
}
})
break;
}
Каждый раз, когда я пытаюсь позвонить в свой шлюз, я получаю
{
"message": "Internal server error"
}
Это проблема с моей интеграцией ?
Еще одно сомнение: как я могу добавить другие маршруты к своему шлюзу ? Я использую шаблон CloudFloration, и это так:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
UserAPI:
Type: AWS::Serverless::Function
Properties:
Handler: build/userAPI.handler
Runtime: nodejs14.x
Events:
Api:
Type: Api
Properties:
Path: /users
Method: ANY
Как я могу добавить маршрут, например /user (GET) или /users (POST) ?
Как и было запрошено, я получаю журналы, поэтому лямбда-код не вызывается, ошибка, которую я получаю, такова:
2021-06-23T12:08:37.557Z eb945ca9-a4b6-4f8e-add1-774276db2cb7 ERROR Invoke Error {
"errorType": "TypeError",
"errorMessage": "Cannot read property 'UserID' of null",
"stack": [
"TypeError: Cannot read property 'UserID' of null",
" at Runtime.handler (/var/task/build/userAPI.js:12:57)",
" at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)"
]
}
Комментарии:
1. Создает ли лямбда какие-либо журналы, если да, то какие журналы? Добавьте ведение журнала. Если лямбда-код не вызывается: разрешено ли шлюзу api вызывать лямбду?
2. @luk2302 Я добавил журналы, посмотрим, все ли в порядке сейчас
3. По-видимому
event.queryStringParameters
, не установлен.