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

