Sequelize多属性匹配查询时排除特定邮箱用户的方法
Sequelize多字段匹配用户时排除指定邮箱记录的实现
直接在User.findAll的查询条件中追加排除规则即可,在数据库查询层完成过滤,不需要查出全量匹配结果后再做内存二次筛选,执行效率更高。
修正后的完整代码:
// 若文件顶部已引入Sequelize操作符Op可跳过该引入语句 const { Op } = require("sequelize"); module.exports.MyFunction = async (req, res) => { const token = req.body.token; const decoded = jwt_decode(token); const excludeEmail = decoded.email; const searchUser = req.body.user; try { const userList = await User.findAll({ where: { [Op.or]: [ { firstName: searchUser }, { lastName: searchUser }, { email: searchUser }, { publicKey: searchUser }, ], // 追加排除规则:邮箱不等于待排除的当前用户邮箱 email: { [Op.ne]: excludeEmail } }, attributes: ["firstName", "lastName", "email", "publicKey", "avatar"], }); res.json({ user: userList }); } catch (err) { res.status(500).json({ err }); } };
修改点说明
- 核心过滤逻辑:在
where配置项中与Op.or平级新增email字段的不等于判断,Sequelize会自动将平级条件按AND逻辑拼接SQL,最终查询逻辑为「满足多字段匹配规则,且邮箱不等于当前token解析出的邮箱」,完全符合剔除指定邮箱用户的需求 - 删除了冗余的
.then()链式调用:await会直接返回Promise执行后的结果,额外套一层.then(response => return response)属于无意义代码,直接删除即可简化逻辑 - 对变量名做了语义化调整,避免字段名和变量名混淆,降低后续维护的理解成本
- 错误返回场景补充了500状态码,避免前端将异常响应误判为正常请求
额外提示:如果上线使用,建议补充token合法性校验逻辑,避免传入非法token导致jwt_decode解析抛出未捕获异常。
内容的提问来源于stack exchange,提问作者Myrmelo
相关产品推荐
相关产品推荐

