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
相关产品推荐
相关产品推荐

