【问题标题】:MissingRequiredParameter: Missing required key 'TableName' in params : Serverless FrameworkMissingRequiredParameter:参数中缺少必需的键“TableName”:无服务器框架
【发布时间】:2021-09-01 11:20:48
【问题描述】:

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

我的处理程序代码如下:

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
  }
}

【问题讨论】:

    标签: aws-lambda serverless-framework serverless


    【解决方案1】:

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

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

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

    同样使用文档客户端,您不需要指定类型。 Key: {id} 会好的。

    【讨论】:

    • 非常感谢老兄!欣赏!!
    • 当然,多一双眼睛总是有帮助的!感谢您接受答案,也请随时点赞!
    猜你喜欢
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2018-09-03
    • 1970-01-01
    相关资源
    最近更新 更多