node.js - AWS PUT 请求遇到“提供的关键元素与架构不匹配”。
问题描述
(编辑以纳入评论)所以我提前为这个冗长的问题道歉。我不知道还能怎么问。我正在尝试使用 React、Node 和 DynamoDB 完成一个全栈 Web 应用程序。POST 和 GET 请求工作正常,但我被困在 PUT 上。我的模拟 PUT 请求工作正常,但是一旦我从 React 的前端尝试它,我就会得到标题中提到的错误。我将首先展示后端代码,然后是模拟更新,然后是前端。
import handler from "./libs/handler-lib";
import dynamoDb from "./libs/dynamodb-lib";
export const main = handler(async (event, context) => {
const data = JSON.parse(event.body);
const params = {
TableName: process.env.tableName,
Key: {
userId: event.requestContext.identity.cognitoIdentityId,
activityId: event.pathParameters.activityId
},
UpdateExpression: "SET title = :title, activityType = :activityType, activityRoutine = :activityRoutine, activityComment = :activityComment",
ExpressionAttributeValues: {
":title": data.title || null,
":activityType": data.activityType || null,
// ":activityRoutine": data.activityRoutine == '' ? "None" : data.activityRoutine,
// ":activityComment": data.activityComment == '' ? "None" : data.activityComment
":activityRoutine": data.activityRoutine || null,
":activityComment": data.activityComment || null
},
ReturnValues: "ALL_NEW"
};
await dynamoDb.update(params);
return { status: true };
这个模拟更新事件没有问题:
{
"body": "{\"title\":\"test\",\"activityType\":\"testing\",\"activityRoutine\":\"\",\"activityComment\":\"\"}",
"pathParameters": {
"activityId": "long-alphanumeric-id"
},
"requestContext": {
"identity": {
"cognitoIdentityId": "us-east-and-so-on"
}
}
}
但是这段代码产生了与模拟完全相同的 Javascript 对象,不适用于 AWS:
function saveActivity(activity) {
try {
return API.put("activities", `/activities/${id}`, {
body: activity
});
} catch(e) {
console.log("saveActivity error:", e);
}
}
async function handleSubmit(event) {
event.preventDefault();
setIsLoading(true)
try {
await saveActivity({
title: title, activityType: activityType, activityRoutine: activityRoutine, activityComment: activityComment
// "key": {userId: userId, activityId: activityId}
// "pathParameters": {"id": activityId},
// "requestContext": {"identity": {"cognitoIdentityId": userId}}
});
} catch(e) {
console.log(e)
setIsLoading(false)
}
}
如果有人需要查看更多代码,我很乐意分享,但我认为这个问题已经很长了。您看到的任何被注释掉的代码都曾尝试过但没有成功。就 AWS 文档而言,如果有人能指出我正确的方向,我也会很高兴。我一直在学习教程并在需要的地方进行修改。任何帮助表示赞赏!
解决方案
推荐阅读
- google-api - GKE 集群 API 中区域和位置端点之间的区别
- python - Django send_mail 引发错误“‘ascii’编解码器无法编码字符”
- javascript - 出现错误:`ReferenceError: Cannot access 'imported const' before initialization` in react
- c++ - 如何获取向量c ++的列表
- html - Html 基础 - 在同一行与不同行编写的控件
- lua - Lua 回调的返回值
- typescript - TypeScript 类中的 # 符号是什么意思?
- c++ - 比较 std::ostream 是否为 std::cout ("no match for 'operator=='")
- sql - 在 PostgreSQL 中,如何通过字段的分组来查询计算结果?
- javascript - 根据选中的收音机切换课程