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

