尝试使用react,axios和mongoose创建一个简单的CRUD应用。
这是我的axios:
deleteUser(id) {
axios.delete(`${rootUrl}/api/users/${this.state.id}`, {
params: { id }
})
.then(response => {
// this.setState({ users: response.data });
console.log('deleteUser response', response, this.state);
});
}
以下是相关的API路由:
router.delete('/users/', (req, res) => {
const { id } = req.body;
User.findByIdAndDelete(id, (error, data) => {
if (error) {
console.log('error in deleting!');
throw error;
} else {
console.log('user has been deleted', data);
res.status(204).json(data);
}
});
});
返回
DELETE /api/users/?id=5b34e5b5dfef8b4sd234567 204 47.816 ms - -
但是当我获取用户时,删除的用户仍然存在。
这是我要将状态映射到的渲染器。我认为我正在正确提取ID,但不确定要尝试什么:
{this.state.users.map(user => {
return (
<div className="Users1" key={user._id}>
<Card>
<CardBody>
<CardTitle>{user.username}</CardTitle>
<CardText>{user._id}</CardText>
<Button onClick={() => this.deleteUser(user._id)}
key={user._id}
type="button"
color="danger"
>
X
</Button>
</CardBody>
</Card>
</div>
);
})}
这是状态:
state = {
users: [],
id: ''
};
答案 0 :(得分:0)
我有类似的问题。通过查看API服务器上的req.query属性而不是req.body,我获得了成功:
const { id } = req.query;
我通过将整个req对象转储到控制台来解决这个问题。
在客户端,我的请求未在URL中包含ID。我只是将其包含在params对象中。这似乎有所帮助。因此,代码中的等效调用如下所示:
axios.delete(`${rootUrl}/api/users/`, {
params: { id }
})
我希望这会有所帮助。我仍然只是在学习React Native,所以我几乎不是专家。但是我想分享对我有用的东西,以防它对别人有帮助。