[英]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.id
( axios.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.