MissingRequiredParameter:参数中缺少必需的键 'TableName':无服务器框架

MissingRequiredParameter: Missing required key 'TableName' in params : Serverless Framework

我得到下面的错误堆栈,代码看起来不错,不知道错误在哪里!

我的处理程序代码如下:

import AWS from 'aws-sdk'; 
import commonMiddleware from '../lib/commonMiddleware';
import createError from 'http-errors';
const dynamodb = new AWS.DynamoDB.DocumentClient();
async function placeBid(event, context) {
  const { id } = event.pathParameters;
  const { amount } = event.body;
  console.log('**********************************');
  console.log(process.env.AUCTIONS_TABLE_NAME);
  console.log('**********************************');
  const params = {
    TableName: process.env.AUCTIONS_TABLE_NAME,
    Key: {
        id: { S: id}
    },
    UpdateExpression: "set highestBid.amount = :amount",
    ExpressionAttributeValues: {
        ":amount": { S: amount },
    },
    ReturnValues: "UPDATED_NEW"
  };
  console.log('**********************************');
  console.log(JSON.stringify(params));
  console.log('**********************************');
  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); 
  }
  return {
    statusCode: 200,
    body: JSON.stringify(updatedAuction)
  };
}
export const handler = commonMiddleware(placeBid);




   2021-06-16T15:41:20.179Z 722a3b28-9f67-44eb-8e5a-85368325dae5    INFO    {
  error: MultipleValidationErrors: There were 2 validation errors:
  * MissingRequiredParameter: Missing required key 'TableName' in params
  * MissingRequiredParameter: Missing required key 'Key' in params
      at ParamValidator.validate (/var/runtime/node_modules/aws-sdk/lib/param_validator.js:40:28)
      at Request.VALIDATE_PARAMETERS (/var/runtime/node_modules/aws-sdk/lib/event_listeners.js:132:42)
      at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
      at callNextListener (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:96:12)
      at /var/runtime/node_modules/aws-sdk/lib/event_listeners.js:86:9
      at finish (/var/runtime/node_modules/aws-sdk/lib/config.js:386:7)
      at /var/runtime/node_modules/aws-sdk/lib/config.js:404:9
      at EnvironmentCredentials.get (/var/runtime/node_modules/aws-sdk/lib/credentials.js:127:7)
      at getAsyncCredentials (/var/runtime/node_modules/aws-sdk/lib/config.js:398:24)
      at Config.getCredentials (/var/runtime/node_modules/aws-sdk/lib/config.js:418:9) {
    code: 'MultipleValidationErrors',
    errors: [ [Error], [Error] ],
    time: 2021-06-16T15:41:20.176Z
  }
}

您已将 params 嵌套在另一个对象中。这导致方法调用接收:

{ params: { TableName: 'AUCTIONS_TABLE_NAME', Key: { id: id}}}

尝试将 dynamodb.update({params}) 替换为 dynamodb.update(params)

还有文档客户端,不需要指定类型。 Key: {id} 会好的。