使用egg.js和MongoDB实现软删除功能

1. 流程概述

在使用egg.js和MongoDB开发应用时,实现软删除功能可以通过以下步骤完成:

  1. 创建数据库表结构和模型
  2. 编写控制器代码,处理软删除的逻辑
  3. 编写路由代码,将请求映射到对应的控制器
  4. 测试软删除功能

接下来,我将逐步为你介绍每一步需要做什么,提供相应的代码示例以及注释说明。

2. 创建数据库表结构和模型

首先,我们需要创建一个数据库表结构和模型,用于存储相关的数据。

const mongoose = require('mongoose');
const { Schema } = mongoose;

const UserSchema = new Schema({
  name: { type: String, required: true },
  age: { type: Number, required: true },
  deleted: { type: Boolean, default: false }, // 添加一个标志位,表示数据是否被软删除
}, { timestamps: true });

const UserModel = mongoose.model('User', UserSchema);

module.exports = UserModel;

在这段代码中,我们定义了一个名为User的数据库模型,包含name、age和deleted字段。deleted字段用于表示数据是否被软删除,timestamps选项用于自动添加createdAt和updatedAt字段。

3. 编写控制器代码

接下来,我们需要编写控制器代码,处理软删除的逻辑。

const { Controller } = require('egg');

class UserController extends Controller {
  // 获取所有用户(包括已软删除的)
  async index() {
    const { ctx } = this;
    const users = await ctx.model.User.find();
    ctx.body = users;
  }

  // 创建用户
  async create() {
    const { ctx } = this;
    const { name, age } = ctx.request.body;
    const user = await ctx.model.User.create({ name, age });
    ctx.body = user;
  }

  // 软删除用户
  async destroy() {
    const { ctx } = this;
    const { id } = ctx.params;
    const user = await ctx.model.User.findById(id);
    if (!user) {
      ctx.status = 404;
      ctx.body = 'User not found';
      return;
    }
    user.deleted = true; // 将deleted字段设置为true,表示软删除
    await user.save();
    ctx.body = 'User deleted';
  }
}

module.exports = UserController;

在这段代码中,我们定义了一个名为UserController的控制器,包含index、create和destroy方法。其中,index方法用于获取所有用户(包括已软删除的),create方法用于创建用户,destroy方法用于软删除用户。软删除的逻辑是将deleted字段设置为true,并保存到数据库中。

4. 编写路由代码

最后,我们需要编写路由代码,将请求映射到对应的控制器。

module.exports = app => {
  const { router, controller } = app;

  router.get('/users', controller.user.index);
  router.post('/users', controller.user.create);
  router.delete('/users/:id', controller.user.destroy);
};

在这段代码中,我们定义了三个路由,分别对应用户列表、创建用户和删除用户的功能。

5. 测试软删除功能

接下来,我们可以使用Postman或类似的工具进行测试,验证软删除功能是否正常工作。

  • 创建一个新用户:发送一个POST请求到/users路由,并在请求体中包含name和age字段。
  • 获取所有用户:发送一个GET请求到/users路由,将返回所有用户的列表,包括已软删除的用户。
  • 软删除一个用户:发送一个DELETE请求到/users/:id路由,其中:id是要删除的用户的ID。

经过以上步骤,我们就成功地实现了软删除功能。

类图

classDiagram
    class UserController {
        +index()
        +create()
        +destroy()
    }
    class UserModel {
        +name: String
        +age: Number
        +deleted: Boolean
    }
    UserController --> UserModel

以上是使用egg.js和MongoDB实现软删除功能的完整流程和代码示例。希望对你有所帮助!