我使用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);
});
}
答案 0 :(得分:0)
您必须定义请求键的列名。更改您的params对象,带有列名的Key表达式并尝试。
const params = {
TableName: EVENTS_TABLE,
Key: {
'id':id
}
};
答案 1 :(得分:0)
在这一行,您将列表与错误的数据绑定
<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>