You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axios delete忽略第二个参数?寻求非路由参数的替代方案

问题解决:axios.delete 用法错误修正

你确实是误用了axios.delete的参数格式,这也是它和axios.post/axios.put用法的核心区别:

axios.delete 的参数规则

axios.delete(url[, config]) 的第二个参数是配置对象,而非直接传递请求数据。而axios.post(url[, data[, config]])/axios.put(url[, data[, config]])的第二个参数是请求体数据,这就是你其他CRUD操作正常、唯独删除失败的原因。

两种可行的修正方案

方案1:将ID放在URL路径中(RESTful推荐写法)

这是你补充说明里提到的方案,也是后端接口设计的常规做法,代码修正如下:

// createAsyncThunk 代码
export const removePlayer = createAsyncThunk(
    'player/removePlayer',
    async (playerId: any, thunkAPI) => {
        try {
            // 将ID拼接在URL路径后
            await axios.delete(`${URL}/${playerId}`)
        } catch (error) {
            return thunkAPI.rejectWithValue(error)
        }
    }
)

后端路由对应:

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

方案2:通过请求体传递ID(不推荐,但满足你的需求)

如果你坚持要在请求体中传递ID,需要把ID放在配置对象的data属性里:

export const removePlayer = createAsyncThunk(
    'player/removePlayer',
    async (playerId: any, thunkAPI) => {
        try {
            await axios.delete(URL, {
                data: playerId // 把ID放在config的data中
            })
        } catch (error) {
            return thunkAPI.rejectWithValue(error)
        }
    }
)

此时后端需要从请求体中获取ID,而不是URL参数。

为什么其他请求能正常工作?

axios.get虽然第二个参数也是配置对象,但你可能是通过URL查询参数传递数据;axios.post/axios.put的第二个参数直接接收请求体数据,所以写法和delete不同,不会出现参数错位的问题。

内容的提问来源于stack exchange,提问作者5ecured

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:46:05