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

Express DELETE接口删除JSON对象后无法同步到本地文件的问题排查

问题分析与解决方案

核心问题:未同步内存数据到本地文件

你当前只修改了内存中通过require加载的user数组,但没有把修改后的内容写回data.json文件——Node.js不会自动将内存中的数据变更同步到本地文件,必须手动调用文件写入API完成这一步。

其他代码问题

  • 数组删除方式错误:用delete user[user.indexOf(obj)]删除数组元素会留下空占位符(比如数组变成[empty, {...}, ...]),而非真正移除元素并整理索引,后续操作会出现异常。
  • 遍历方法不合适:map的作用是生成新数组,用来做遍历删除逻辑属于误用,应该用findIndex直接定位目标元素的索引。
  • eval存在严重安全风险:eval(req.params.id)会执行传入的任意代码,恶意用户可构造参数执行危险操作,直接用parseInt转换ID更安全。

修正后的代码示例

const express = require("express");
const fs = require("fs");
const path = require("path");
const app = express();

// 读取最新用户数据
const getUserData = () => {
  const dataPath = path.join(__dirname, "./data.json");
  return JSON.parse(fs.readFileSync(dataPath, "utf8"));
};

// 将数据写入本地文件
const saveUserData = (data) => {
  const dataPath = path.join(__dirname, "./data.json");
  fs.writeFileSync(dataPath, JSON.stringify(data, null, 2));
};

app.route("/user/:id").delete((req, res) => {
  const userId = parseInt(req.params.id);
  if (isNaN(userId)) {
    return res.status(400).json({ error: "无效的用户ID" });
  }

  let users = getUserData();
  // 查找目标用户索引
  const targetIndex = users.findIndex(user => user.id === userId);
  if (targetIndex === -1) {
    return res.status(404).json({ error: "用户不存在" });
  }

  // 移除目标用户
  users.splice(targetIndex, 1);
  // 同步到本地文件
  saveUserData(users);

  res.status(200).json({ message: "用户删除成功" });
});

app.listen(3000, () => console.log("服务器运行在3000端口"));

关键修正说明

  1. 新增getUserData和saveUserData函数,确保每次操作都基于最新文件内容,避免require的缓存问题
  2. 用parseInt替代eval,彻底消除代码注入风险
  3. 用findIndex+splice正确删除数组元素,避免残留空槽
  4. 删除后立即调用saveUserData将变更写入本地文件
  5. 增加了ID格式校验、用户不存在等异常场景的处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:02:38