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

使用Axios.delete()传递ID数组批量删除时出现400错误的排查

问题排查与修复方案

前端问题:Axios Delete请求未正确传递数据

Axios的delete方法默认不会把第二个参数作为请求体发送,必须显式将数据放在data字段中。你的代码直接传递{isCHecked},导致后端无法接收到ID数组。

修改前端deleteAll函数:

const deleteAll = async()=>{
    console.log(isCHecked)
    await Axios.delete('http://localhost:3500/newItems', {
        data: { ids: isCHecked } // 将ID数组存入data字段
    }).then((response) => {
        console.log(response.status)
        console.log(response.data)
    })
    .catch((e) => console.log('something went wrong :(', e));
}

后端问题1:请求体解析与获取错误

首先要确保Express服务器已配置JSON解析中间件(否则req.body会一直是undefined),然后从req.body.ids中获取前端传递的ID数组,而非直接取req.body。

在服务器文件中添加中间件(需放在路由挂载前):

app.use(express.json())
app.use('/newItems', require('./routes/newItemsRoutes'))

修改后端控制器的参数获取逻辑:

const deleteNewItems = asyncHandler(async (req, res) => { 
    const { ids } = req.body // 解构获取ID数组
    console.log(ids)

    if(!ids || ids.length === 0) {
       return res.status(400).json({message: 'Items Ids are required'})
    }
    // 后续逻辑...
})

后端问题2:Mongoose批量删除逻辑错误

  • findById仅支持查询单个文档,批量查询需用NewItemsData.find({_id: {$in: ids}})
  • 不能在查询返回的文档数组上调用deleteMany(),需直接在模型上执行批量删除操作

修改控制器的删除逻辑:

const deleteNewItems = asyncHandler(async (req, res) => { 
    const { ids } = req.body
    console.log(ids)

    if(!ids || ids.length === 0) {
       return res.status(400).json({message: 'Items Ids are required'})
    }

    // 校验待删除ID是否存在
    const existingItems = await NewItemsData.find({_id: {$in: ids}}).exec()
    if(existingItems.length !== ids.length) {
       return res.status(400).json({message: '部分商品不存在'})
    }

    // 执行批量删除
    const result = await NewItemsData.deleteMany({_id: {$in: ids}}).exec()
    if(result.deletedCount === 0) {
       return res.status(400).json({message: '未删除任何商品'})
    }

    res.json({message: `${result.deletedCount} 个商品已被删除`})
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:10:03