【问题标题】:Facing this error "ValidationException: The parameter cannot be converted to a numeric value: NaN"面对此错误“ValidationException:参数无法转换为数值:NaN”
【发布时间】:2021-05-13 05:44:40
【问题描述】:

我正在尝试使用 AWS HTTP API 通过 AWS Lambda 函数在 AWS Dynamo DB 中输入数据。仅供参考 Dynamo DB 中的参数 (Id) 的数据类型最初是 Number,但在解析 JSON 数据时将其作为 String,所以我在“Id”参数旁边写了“Number”以便将其转换为“Number”。当我尝试运行这个 lambda 函数时,我收到了这个错误。请帮忙,谢谢!

Lambda 函数:

payload: { "Id": $input.json('$.Id') "name": $input.json('$.name')

console.log('starting function');
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});

exports.handler = function(event, ctx, callback) {

  var params = {
    Item: {
      Id: Number(event.Id),
      name: event.name
    },

    TableName: 'Test'
  };
  console.log(params)
  docClient.put(params, function(err, data) {
    if(err) {
      callback(err, null);
    } else{
      callback(null, data);
    }
  });
  
}

错误日志:

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda amazon-dynamodb


    【解决方案1】:

    查看日志。

    您的 event.Id 值为“NaN”,表示“不是数字”。

    还有 event.name 是“未定义的”。

    所以你的问题出现在这里:

    exports.handler = function(event, ctx, callback) {
    

    您的事件对象未填充您期望的值。

    有效负载应该是正确的 JSON 格式,类似于:

     {
        "id": "6",
        "name": "Test Name"
     }
    

    要实现这一点,在前端代码的 POST 中,您可以使用以下内容:

    数据:JSON.stringify({"id": $('#Id').val(), "name": $('#name').val()})

    确保$('#Id').val() 和$('#name').val() 实际上具有正确的值。

    【讨论】:

    • 感谢您的回复,但是当我输入硬编码数据时,我的数据能够存储在 Dynamo DB 中。那么这真的有问题吗? @JackMarchetti
    • 对。您的 DynamoDB 代码非常好。问题是您的事件对象为空或为空。你能提供你发送到你的 lambda 的有效负载吗?
    • 下面是我的payload,{ "Id": $input.json('$.Id'), "name": $input.json('$.name') }
    • 我认为这不会显示为正确的 json。尝试发送类似: { "id": "6", "name": "Test Name" }
    • 尝试发送上面提到的有效负载,因为它在 Postman 上测试 API 时有效(发送的硬编码数据与上面在有效负载中提到的相同)但是当我从前端尝试时仍然不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    相关资源
    最近更新 更多