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

Koa用户应用删除功能异常:误删全部用户而非指定ID用户

Koa删除用户功能错误排查与修复

你的删除功能出现全量删除的问题,核心有两个代码错误,还有一个数据持久化的隐患,具体如下:

1. 完全错误的过滤条件

在deleteUser函数里,你写的过滤条件是obj.id !== user.Users[index].id——这里的obj就是当前遍历到的user.Users[index],相当于拿每个用户的ID和自己对比,结果永远是false,所以filter会把所有用户都排除,最终得到空数组,导致所有用户被删除。

2. 未读取路由中的目标用户ID

你在路由里定义了/:id/delete_user,但在deleteUser控制器里完全没读取这个ID参数,根本不知道要删除哪个用户。

3. 数据未持久化到JSON文件

你现在修改的只是内存中的user对象,并没有把修改后的内容写回本地的user.json文件,服务重启后数据会自动恢复成原来的样子。


修正后的user.controller.ts

import user from "./user.json";
import fs from "fs";
import path from "path";
import type { Context } from "koa";

console.log(user);

export const getUser = (ctx: Context) => {
  ctx.body = user;
  ctx.status = 200;
};

export const addUser = (ctx: Context) => {
  user.Users.push(ctx.request.body);
  // 写入文件持久化新增数据
  fs.writeFileSync(
    path.resolve(__dirname, "./user.json"),
    JSON.stringify(user, null, 2)
  );
  ctx.body = "User Created!";
  ctx.status = 201;
};

export const deleteUser = (ctx: Context) => {
  // 获取路由中传递的目标用户ID
  const targetId = ctx.params.id;
  // 正确过滤:保留ID不等于目标ID的用户
  const filtered = user.Users.filter((obj) => obj.id !== targetId);
  console.log(filtered);
  user.Users = filtered;
  // 写入文件持久化删除后的结果
  fs.writeFileSync(
    path.resolve(__dirname, "./user.json"),
    JSON.stringify(user, null, 2)
  );
  ctx.body = "User deleted";
  ctx.status = 202;
};

补充说明

  • 改用Koa官方的Context类型,替代自定义的ctx类型,类型更准确,避免遗漏属性。
  • 新增fs.writeFileSync同步写入文件逻辑(如果追求性能也可以用异步的fs.writeFile,需处理Promise),确保修改后的数据能保存到本地JSON文件。
  • 过滤逻辑改为obj.id !== targetId,只排除ID匹配的目标用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:31:00