axios和mongo-尝试使用映射的_id作为周边删除。它以200响应,但对象保留在数据库中

时间:2018-06-28 15:40:54

标签: mongodb reactjs mongoose axios

尝试使用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: ''
};

1 个答案:

答案 0 :(得分:0)

我有类似的问题。通过查看API服务器上的req.query属性而不是req.body,我获得了成功:

const { id } = req.query;

我通过将整个req对象转储到控制台来解决这个问题。

在客户端,我的请求未在URL中包含ID。我只是将其包含在params对象中。这似乎有所帮助。因此,代码中的等效调用如下所示:

axios.delete(`${rootUrl}/api/users/`, {
    params: { id }
})

我希望这会有所帮助。我仍然只是在学习React Native,所以我几乎不是专家。但是我想分享对我有用的东西,以防它对别人有帮助。