“一个或多个参数值无效:项目中缺少关键的StudentId”

时间:2019-12-06 18:41:21

标签: node.js aws-lambda amazon-dynamodb aws-api-gateway serverless-framework

我正在使用无服务器来公开getwayapi,lambda函数和dynamodb中的HTTP请求,但收到错误消息“一个或多个参数值无效:项目中缺少关键的StudentId”。 请帮帮我!

这是我在app.js中的代码

app.post('/students', function (req, res) {

  const body = req.body;
  const params = {
    TableName: STUDENTS_TABLE,
    Item: {
      "studentId": body.studentId,
      "address": body.address,
      "birth": body.birth,
      "class": body.class,
      "mail": body.mail,
      "name": body.name,
      "phone": body.phone,
      "sex": body.sex,
    }
  }

  dynamoDb.put(params, function (err, data) {
    if (err) {
      res.send({
        success: false,
        message: err
      });
    } else {
      res.send({
        success: true,
        message: 'Created!'
      });
    }
  });

});

1 个答案:

答案 0 :(得分:0)

正如mailtobash用户所说,我们缺少一些上下文来准确回答您的问题。向req.body端点发送请求时,可以添加POST /students中的内容吗?

如果在端点代码中使用console.log(req.body),则在发送请求时可以在终端上打印该值。如果在开发环境中看不到日志,则可以在执行其余代码之前让lambda返回req.body,如下所示:

return res.send({
  success: false,
  requestBody: req.body
})

然后,您将可以在Postman(https://www.getpostman.com/)或客户端中检查该响应(如果您是基于Web的应用程序,则可以进入浏览器的开发工具并查看详细信息在“网络”标签中的请求)。知道requestBody中的内容将非常有帮助。

在任何情况下,错误消息均表明studentIdSTUDENTS_TABLE的分区键,并且丢失。分区键是必需的,并且在DynamoDB表中必须是唯一的。另外,如果您使用的是现有值,则dynamoDB.put将覆盖现有记录(但该行为不会触发错误)。

从DynamoDB收到错误消息的原因很可能是因为req.body.studentIdundefined,空字符串(即"")或任何其他DynamoDB在设置分区键的值时会认为“丢失”的其他值。

请随时查看有关主键的AWS文档:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey