我正在使用无服务器来公开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!'
});
}
});
});
答案 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
中的内容将非常有帮助。
在任何情况下,错误消息均表明studentId
是STUDENTS_TABLE
的分区键,并且丢失。分区键是必需的,并且在DynamoDB表中必须是唯一的。另外,如果您使用的是现有值,则dynamoDB.put
将覆盖现有记录(但该行为不会触发错误)。
从DynamoDB收到错误消息的原因很可能是因为req.body.studentId
是undefined
,空字符串(即""
)或任何其他DynamoDB在设置分区键的值时会认为“丢失”的其他值。
请随时查看有关主键的AWS文档:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey