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

Node.js发送DELETE请求后JSON文件内对象未删除问题求助

DELETE请求删除JSON文件指定对象功能修复方案

核心错误说明

  • Array.splice() 方法的第一个参数需要是待删除元素的数组索引,你当前传入的是查询到的Acar对象本身,无法定位到正确的删除位置,所以删除逻辑不生效。
  • 操作顺序错误:你先把未修改的cars数组写入了JSON文件,之后才执行splice删除操作,写入到文件的永远是没有删除数据的原始数组。
  • 状态码使用不规范:HTTP 204状态码定义为无响应内容,返回该状态码时携带的JSON响应体会被大部分客户端忽略,不符合HTTP规范。
  • 缺省错误捕获:没有判断文件写入失败的异常场景,出现IO错误时接口会无响应。

修复后的完整代码

const express = require('express');
const fs = require('fs');
const app = express();
app.use(express.json());
// 首次启动前需确保Data目录存在,否则会抛出读写错误
const cars = JSON.parse(fs.readFileSync(`${__dirname}/Data/cars.json`))

const deleteCar = (req, res)=>{
 const id = req.params.id * 1
 // 改用findIndex直接获取目标元素的数组索引
 const carIndex = cars.findIndex(el => el.id === id);
 if(carIndex === -1){
      return res.status(404).json({
           status : "failed",
           message : "请求的资源不存在"
      })
 }
 // 先执行删除操作修改cars数组
 const deletedCar = cars.splice(carIndex, 1)
 // 再把修改后的数组写入文件,JSON.stringify加格式化参数方便后续查看
 fs.writeFile(`${__dirname}/Data/cars.json`, JSON.stringify(cars, null, 2), err=>{
      if(err) {
        return res.status(500).json({
          status: "failed",
          message: "数据保存失败"
        })
      }
      // 改用200状态码返回响应内容
      res.status(200).json({
           status : "success",
           data : {
                car : deletedCar
           }
      })
 })
};
app.delete('/api/v1/cars/:id', deleteCar)

const port = 2000
app.listen(port, ()=>{
console.log(`服务已启动,监听端口${port}`);
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:42:01