首页 > 解决方案 > 我可以为从 Dynamodb 获取项目的主键指定什么?

问题描述

我是 AWS 的新手。我想指定主键以使用无服务器堆栈从 Dynamodb 获取项目。我尝试了一些但没有用。我收到一个错误,上面写着RESPONSE {"statusCode":500,"body":"{\"error\":\"Item not found.\"}"}

这是一个具有主键和排序键的项目。

在此处输入图像描述

获取用户.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),
    };
  };
}

标签: javascriptamazon-web-servicesamazon-dynamodbserverless-stack

解决方案


推荐阅读