API Gateway对接Lambda删除DynamoDB数据报错如何修复?
错误修复方案
错误2 修复(TypeError: Cannot destructure property 'ClientID' of 'event.pathParameters' as it is undefined)
这个错误是API Gateway没有正确传递路径参数到Lambda导致的,按以下步骤修复:
- 检查API Gateway删除接口的资源路径配置,必须添加两个路径参数占位符,示例路径:
/case/{ClientID}/{CaseID},占位符拼写严格区分大小写,和代码中保持完全一致 - 确保Lambda集成开启了Lambda代理集成,开启后API Gateway会自动将路径参数写入
event.pathParameters字段;如果未开启代理集成,需要在集成请求的映射模板中手动配置路径参数映射 - 代码中添加空值兼容逻辑,避免直接解构空对象报错
错误1 修复(ValidationException: The provided key element does not match the schema)
这个错误是传给DynamoDB的主键不符合表结构定义导致的,按以下步骤修复:
- 确认DynamoDB表
ClientID(分区键)和CaseID(排序键)的定义数据类型,如果你表中定义的是数字类型(N),传字符串类型的参数就会触发校验失败,DynamoDB DocumentClient要求传入的键值类型和表定义完全匹配 - 调用接口时必须同时传入两个路径参数,缺一不可,任意一个参数为空都会触发该错误
- 确认代码中
Key下的两个键名ClientID、CaseID和表定义的键名拼写、大小写完全一致
其他代码问题修复
你现有代码中delete操作的返回值处理存在错误:DynamoDB的delete操作返回结果中不存在data.Items字段,且204状态码约定不返回响应体,需要对应调整。
修复后完整代码
'use strict'; const AWS = require('aws-sdk'); exports.handler = async (event, context) => { const documentClient = new AWS.DynamoDB.DocumentClient(); let responseBody = ""; let statusCode = 0; // 兼容pathParameters为空的情况 const pathParams = event.pathParameters || {}; const {ClientID, CaseID} = pathParams; // 提前校验参数是否存在 if (!ClientID || !CaseID) { responseBody = JSON.stringify({message: "缺少必填参数ClientID或CaseID"}); statusCode = 400; } else { const params = { TableName: "Case", Key: { ClientID: ClientID, CaseID: CaseID } }; try { await documentClient.delete(params).promise(); // 204状态码不需要返回body,也可以改成200返回成功提示 statusCode = 204; } catch(err) { responseBody = `Unable to delete Case: ${err}`; statusCode = 403; } } const response = { statusCode: statusCode, headers: { "Content-Type": "application/json", "access-control-allow-origin":"*" }, body: responseBody }; return response; };
内容的提问来源于stack exchange,提问作者M H
相关产品推荐
相关产品推荐

