使用egg.js和MongoDB实现软删除功能
1. 流程概述
在使用egg.js和MongoDB开发应用时,实现软删除功能可以通过以下步骤完成:
- 创建数据库表结构和模型
- 编写控制器代码,处理软删除的逻辑
- 编写路由代码,将请求映射到对应的控制器
- 测试软删除功能
接下来,我将逐步为你介绍每一步需要做什么,提供相应的代码示例以及注释说明。
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实现软删除功能的完整流程和代码示例。希望对你有所帮助!