javascript - 我可以为从 Dynamodb 获取项目的主键指定什么?
问题描述
我是 AWS 的新手。我想指定主键以使用无服务器堆栈从 Dynamodb 获取项目。我尝试了一些但没有用。我收到一个错误,上面写着RESPONSE {"statusCode":500,"body":"{\"error\":\"Item not found.\"}"}
这是一个具有主键和排序键的项目。
- 主键:storeName
- 排序键:电子邮件
获取用户.ts
import handler from "./util/handler";
import dynamoDb from "./util/dynamodb";
export const main = handler(async (event: any) => {
const data = JSON.parse(event.body);
const params = {
TableName: process.env.TABLE_NAME,
Key: {
storeName: data.storeName,
email: event.pathParameters.id,
},
};
const result = await dynamoDb.get(params);
if (!result.Item) {
throw new Error("Item not found.");
}
// Return the retrieved item
return result.Item;
});
当我硬编码storeName: test
时,它成功获得了一个项目。我不想得到硬编码的。我尝试使用 event.body 从 dynamodb 获取它。但问题是我不知道 event.body 的内容是什么const data = JSON.parse(event.body);
。而且我想没有 event.body 但我不知道我还能指定什么。希望我能解决它。谢谢你。
用户页面.tsx
import React, { useState, useRef, useEffect } from 'react'
import { useParams } from 'react-router-dom'
import { API } from 'aws-amplify'
const UserPage: React.FC = () => {
const [user, setUser] = useState([])
const { id }: { id: string } = useParams()
useEffect(() => {
function loadUser() {
return API.get('users', `/users/${id}`)
}
async function onLoad() {
try {
const user = await loadUser().catch(e => console.error(e))
setUser(user)
} catch (e) {
console.error(e)
}
}
onLoad()
}, [id])
return (
<>
<h3>user{user}</h3>
<p>Email:{user?.email}</p>
<p>user name:{user?.name}</p>
</>
)
}
处理程序.ts
import * as log from '../log'
declare const Node: any;
export default function handler(lambda: any) {
return async function (event: any,context: any){
let body, statusCode;
try {
// Run the Lambda
body = await lambda(event, context);
log.info('body', body)
statusCode = 200;
} catch (e: any) {
log.error(e);
log.info('body', context)
body = { error: e.message };
statusCode = 500;
}
// Return HTTP response
return {
statusCode,
body: JSON.stringify(body),
};
};
}
解决方案
推荐阅读
- three.js - 三、以 px 为单位的 Sprite 大小,sizeAttenuation 为 false
- c# - Azure Web App 未使用连接字符串通过 VPN 连接到 On-Site SQL Server
- excel - 获取和转换中的高级代码编辑器
- python - 为小部件指定尺寸并在其中绘图
- reactjs - 防止在 SELECT 下拉列表中加载选项,直到输入最少字符
- r - 正则表达式 [[:upper:]] 检测小写但不是大写
- python - 打印状态和返回状态不同
- angular - 由于找不到该命令,因此无法更新到 Angular 8
- android - 材料编辑文本未在 android studio 编辑器中呈现
- list - Haskell 无法匹配类型,由签名给出