Axios删除将忽略第二个参数

edqdpe6u  于 2022-11-05  发布在  iOS
关注(0)|答案(1)|浏览(174)

这是我的createAsyncThunk

export const removePlayer = createAsyncThunk(
    'player/removePlayer',
    async (playerId: any, thunkAPI) => {
        try {
            await axios.delete(URL, playerId)
        } catch (error) {
            return thunkAPI.rejectWithValue(error)
        }
    }
)

这是一个函数,它调度

<Button variant='outlined' onClick={() => {
     dispatch(removePlayer(player._id))
}}><DeleteIcon /></Button>

我已经用createAsyncThunk完成了其他CRUD操作,比如Read、Create和Update,它们都运行得很好。我用axios.delete做错了吗?这就是我的感觉。正如你所看到的,我所要做的就是传入玩家ID,然后删除它,就这么简单。我对axios.putaxios.getaxios.post使用了非常相似的逻辑,它们都运行得很好

EDIT我可以通过向路由添加id参数来解决此问题,如下所示

router.delete('/:id', deletePlayer)

但我只是好奇是否还有其他替代方法,因为使用axios post get和put,我可以在不使用任何参数的情况下执行此操作

9jyewag0

9jyewag01#

但我只是好奇是否还有其他选择
通常,DELETE请求没有请求主体,但这并不意味着您不能使用请求主体。
从客户端来说,类似这样的事情...

axios.delete("/url/for/delete", {
  data: { playerId }
});

将发送具有主体{"playerId":"some-id-value"}application/json请求。
在服务器端,对于Express,您可以使用以下命令

router.delete("/url/for/delete", async (req, res, next) => {
  const { playerId } = req.body;

  try {
    // do something with the ID...

    res.sendStatus(204);
  } catch (err) {
    next(err.toJSON());
  }
});

要处理JSON有效负载,您应该注册适当的中间件

app.use(express.json());

相关问题