繁体   English   中英

根据ID从DynamoDB检索项目

[英]Retrieving an item from DynamoDB based on id

我使用mern堆栈创建了一个简单的crud应用程序。 我可以将一个项目保存到dynamodb,但是无法通过id检索该项目。 该应用程序使用一个简单的前端来save/edit/delete项目。

app.js

app.use('/api/event', event);

event.js

router.get('/:id', (req, res) => {
  const id = req.params.id;

  const params = {
    TableName: EVENTS_TABLE,
    Key: {
      id
    }
  };

  dynamoDb.get(params, (error, result) => {
    if (error) {
      res.status(400).json({ error: 'Error retrieving Event' });
    }
    if (result.Item) {
      res.json(result.Item);
    } else {
      res.status(404).json({ error: `Event with id: ${id} not found` });
    }
  });
});

桌子型号

{
    "TableName": "events",
    "KeySchema": [
      {
        "AttributeName": "id",
        "KeyType": "HASH"
      }
    ],
    "AttributeDefinitions": [
      {
        "AttributeName": "id",
        "AttributeType": "S"
      }
    ],
    "ProvisionedThroughput": {
      "ReadCapacityUnits": 1,
      "WriteCapacityUnits": 1
    }
}

错误:

ID未定义

我的代码: https : //github.com/omarhassanhub/mern-event

角度代码:所有事件的链接

<tbody>
  {this.state.events.map(event =>
  <tr>
    <td>
      <Link to={`/show/${event._id}`}>{event.date} </Link> </td> <td>{event.time}</td>
    <td>{event.title}</td>
  </tr>
  )}
</tbody>

尝试通过ID获取event

  componentDidMount() {
    axios.get('/api/event/'+this.props.match.params.id)
      .then(res => {
        this.setState({ event: res.data });
        console.log(this.state.event);
      });
  }

您必须定义请求键的列名。 更改您的params对象,带有列名的Key表达式并尝试。

const params = {
    TableName: EVENTS_TABLE,
    Key: {
      'id':id
    }
  };

在这一行,您将列表与错误的数据绑定

<Link to={`/show/${event._id}`}>{event.date} </Link> </td> <td>{event.time}</td>

您的event包含id字段而不是_id (您的表模型说的是)

然后,当您尝试在this.props.match.params.idaxios.get('/api/event/'+this.props.match.params.id) )上获取事件ID时, id将是undefined

要解决此问题,只需使用正确的数据生成事件列表:

<Link to={`/show/${event.id}`}>{event.date} </Link> </td> <td>{event.time}</td>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM