// 获取用户列表(分页)
router.post('/manage/user/list', (req, res) => {
// 从请求正文中读取页码和每页。如果不存在该值,则使用默认值 1 和 5。
let page = req.body.page || 1;
let size = req.body.size || 5;
// 查询所有用户名不为 'admin' 的用户。
UserModel.find({ username: { '$ne': 'admin' } }).then(users => {
// 计算满足条件的用户总数。
let count = users.length;
// 执行分页查询(基于页码和每页大小)。
// `skip 方法用于跳过指定数量的对象,并返回剩余的对象。
// `limit()` 方法用于限制查询返回的对象数量。
UserModel.find({ username: { '$ne': 'admin' } }).skip((page - 1) *(size)).limit(parseInt(size)).exec().then(data => {
// 查询所有角色并将它们添加到响应数据中。
RoleModel.find().then(roles => {
// 返回用户列表、总记录数角色列表。
res.send({ status: 0, data: { total: count, data: data, roles: roles } });
});
});
}).catch(error => { // 捕获任何异常并向客户端发送错误应。
console.log("获取用户列表(分页)异常", error);
res.send({ status: 1, msg: '获取用户列表(分页)异常,请重试' });
});
})
这里是每一行代码的详细解释:
-
router.postmanage/user/list', (req, res) => {})
- 创建一个 POST 路由管理
/manage/user/list
。 - 当请求到达时执行路由处理程序。
- 创建一个 POST 路由管理
-
let page = req.body.page || 1;
- 请求正文中获取当前页码。
- 如果请求正文中不存在
page
参数,则将page
变量设置为默认值1
。
-
let size = req.body.size || 5;
- 从请求正文中获取每页大小。
2 如果请求正文中不存在size
参数,则将size
变量设置为默认值5
。
- 从请求正文中获取每页大小。
-
UserModel.find({ username: { '$ne': 'admin' } }).then(users => {})
- 查询
UserModel
中所有用户名不为admin
的用户列表。 - 当查询完成时执行回调函数5. let count = users.length;
- 计算满足条件的用户列表中的用户数量。
- 查询
-
UserModel.find({ username: { '$ne': 'admin' } }).skip((page - 1) * parseInt(size)).limit(parseInt(size)).exec().then(data => {})
- 使用
skip
方法跳过初始查询结果集中若干条数据后获取数据集合,这里跳过了(page - 1) * size
条记录,并限制获取数量为size
。 limit
限制数据数量为size
。exec
方法执行查询,将满足条件的用户列表添加到data
中。- 当查询完成时执行回调函数。
- 使用
-
RoleModel.find().then(roles => {})
- 查询角色列表,在查询完成时执行回调函数。
-
res.send({ status: 0, data: { total: count, data: data, roles: roles } });
- 添加一个成功响应,响应中包含用户列表、记录总数和角色列表。
-
catch(error => {})
- 在处理过程中捕获任何错误。
- 当发生错误时,向客户端发送一个错误响应。
尽管这段代码非常简洁,但其内容却非常精细。该代码涉及到了 MongoDB 查询、分页、异常处理、发送响应等许多概念