Node.js中部门经理列表接口如何排除刚创建的新用户供其选择汇报经理
实现方法
你有两种实现思路,推荐优先用第一种,避免出现重名用户被误过滤的问题:
方案1:通过用户ID过滤(推荐)
这个方案需要前端调用接口时额外传入当前新注册用户的ID,接口调用格式调整为:/department/getManagersList?department_name=IT¤t_user_id=6103d7c1f2bba5af7cad4083
后端代码修改点:
- 新增接收当前用户ID的参数
- 在往
manager_list中插入数据前,判断当前员工ID不等于传入的新用户ID才插入
修改后的完整代码如下:
adminController.getManagersList = async (req, res) => { try { var manager_list = []; var department_data = {}; var employees_list = []; var manager_details = {}; var department_name = req.query.department_name; // 新增:获取当前新用户的ID参数 var current_user_id = req.query.current_user_id; if (isEmpty(department_name)) return res.status(400).json({ status: "failure", message: `Department name ${emptyField}`, }); // 新增:校验当前用户ID参数非空 if (isEmpty(current_user_id)) return res.status(400).json({ status: "failure", message: `Current user id ${emptyField}`, }); department_data = await DepartmentData.findOne({ department_name: department_name, }) .populate("employees") .exec(); if (isEmpty(department_data)) return res .status(400) .json({ status: "failure", message: `Department ${dataNotFound}` }); employees_list = department_data.employees; employees_list.forEach((empList) => { let department_data = empList.department; department_data.forEach((depList) => { if (depList.name == department_name) { // 新增:判断当前员工不是新用户才加入列表 if(empList._id.toString() !== current_user_id) { manager_details = {}; manager_details.id = empList._id; manager_details.name = empList.full_name; manager_details.role = depList.role; manager_list.push(manager_details); } } }); }); res.status(200).json({ status: "success", managersList: manager_list }); } catch (err) { console.log(err); res .status(500) .json({ status: "failure", message: "Internal Server Error" }); } };
方案2:通过用户名过滤(临时使用)
如果暂时无法调整前端传参,也可以直接按用户名过滤,但是存在重名用户被误过滤的风险,仅适合临时使用,修改点就是在插入数据前判断用户名不等于sam winchester即可:
核心过滤逻辑:
if(empList.full_name !== 'sam winchester') { // 插入列表逻辑 }
内容的提问来源于stack exchange,提问作者Atanu Paul
相关产品推荐
相关产品推荐

