Serverless Framework调用DynamoDB报MissingRequiredParameter错误如何解决
错误原因
- 调用
dynamodb.update()方法时参数多套了一层对象:代码中传入的是dynamodb.update({params}),最终传给SDK的结构是{ params: { TableName: xxx, Key: xxx } },SDK要求TableName、Key这类必填参数放在参数对象顶层,自然会抛出缺失必填参数的错误。 DocumentClient参数写法不符合规范:DynamoDB的DocumentClient已经封装了原生的类型映射逻辑,不需要手动指定{S: xxx}这类类型标识,你在Key和ExpressionAttributeValues里加的类型标注是原生DynamoDB客户端的用法,即使第一层参数问题修复后也会触发格式错误。
修复方法
- 去掉
update方法传参时多余的外层包裹,将dynamodb.update({params})修改为dynamodb.update(params) - 调整
params内部的Key和ExpressionAttributeValues写法,移除手动添加的类型标识
修复后的对应代码片段如下:
const params = { TableName: process.env.AUCTIONS_TABLE_NAME, Key: { id: id }, UpdateExpression: "set highestBid.amount = :amount", ExpressionAttributeValues: { ":amount": amount, }, ReturnValues: "UPDATED_NEW" }; let updatedAuction; try { const result = await dynamodb.update(params).promise(); console.log({result}); updatedAuction = result.Attributes; } catch(e) { console.log({'error': e}); throw new createError.InternalServerError(e); }
内容的提问来源于stack exchange,提问作者Abhishek Gautam
相关产品推荐
相关产品推荐

