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

Express.js问题:使用DELETE请求无法删除数组中的元素

解决Express待办API DELETE请求失效问题

你的DELETE请求失败主要有三个核心问题,对应修正方案如下:

1. 未全局配置JSON解析中间件

你仅在DELETE路由里单独添加了express.json(),但Express中间件按顺序执行,全局未配置的话,DELETE请求的JSON数据无法被解析,导致req.body为空,拿不到目标ID参数。

修正:
在全局添加JSON解析中间件,放在urlencoded之后:

const express = require('express');
const app = express();

var arrs =[];

// 同时配置两种解析中间件,兼容form-data和JSON格式请求体
app.use(express.urlencoded({extended:false}))
app.use(express.json()) // 新增全局JSON解析

// 后续路由代码不变...

2. ID类型不匹配导致过滤失效

POST请求中,通过urlencoded解析的ID是字符串类型,而DELETE时你把ID转成了Number(id),两者类型不同,e.id !== Number(id)永远为true,无法过滤掉目标元素。

修正:
统一ID的类型,要么POST时转成数字,要么DELETE时不转:

// POST路由修正:将ID转为Number存入数组
app.post('/',(req,res)=>{
  const {datas,id} = req.body;
  let items = {datas, id: Number(id)}; // 统一存储数字类型ID
  arrs.push(items);
  console.log(arrs);
  res.send('value');
})

// DELETE路由修正:直接用数字类型对比
app.delete('/',(req,res)=>{
  const {id} = req.body;
  arrs = arrs.filter((e)=> e.id !== Number(id));
  res.json(arrs); // 用JSON格式返回数据更规范
})

3. 路由设计优化(可选)

DELETE请求建议用路径参数传递ID,而非请求体,这是RESTful API的标准设计,也能避免请求体解析的问题。

优化后的DELETE路由:

// 改用路径参数传递ID
app.delete('/:id',(req,res)=>{
  const deleteId = Number(req.params.id);
  arrs = arrs.filter((e)=> e.id !== deleteId);
  res.json(arrs);
})

此时在Postman中,只需请求http://localhost:5000/1(1为要删除的ID),无需设置请求体。

Postman操作注意事项

  • 如果用JSON请求体传ID,务必在Postman中把请求体类型设为raw -> JSON,并确保请求头包含Content-Type: application/json
  • 如果用路径参数,直接在URL后拼接ID即可,无需请求体

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:14:57