JavaScript中如何条件式向对象添加键值对(含Sequelize场景)
解决方案:根据条件动态构建Sequelize查询参数对象
嘿,这个需求在动态构建数据库查询时特别常见,咱们一步步来实现就行😉
步骤1:初始化空对象
先声明你需要的空查询参数对象:
let queryParams = {};
步骤2:处理status存在的情况
这里要先明确“存在”的定义——如果是指status有有效值(不是undefined、null或者空字符串这类假值),可以用基础的条件判断:
// 假设status是你要判断的目标变量,比如来自req.body.status或其他地方 if (status) { queryParams.adminapproval = req.body.approvalStatus; }
如果需要更严谨的判断(比如允许status为0这类假值),可以调整为:
if (status !== undefined && status !== null) { queryParams.adminapproval = req.body.approvalStatus; }
步骤3:处理type存在的情况
当type存在时,给对象添加$or属性,里面放你需要的Sequelize多字段模糊匹配条件。这里推荐用模板字符串拼接%${keyword}%,代码更简洁易读:
// 假设type和keyword都是已定义的变量 if (type) { queryParams.$or = [ Sequelize.where( Sequelize.fn('concat_ws', ' ', Sequelize.col('firstName'), Sequelize.col('lastName')), { $like: `%${keyword}%` } ), { email: { $like: `%${keyword}%` } }, { company: { $like: `%${keyword}%` } }, { mobileNo: { $like: `%${keyword}%` } }, { city: { $like: `%${keyword}%` } } // 这里可以继续添加其他需要匹配的字段 ]; }
完整代码示例
把所有逻辑整合到一起,就是这样:
const Sequelize = require('sequelize'); // ES模块环境用import Sequelize from 'sequelize' let queryParams = {}; // 处理status条件 if (status) { // 根据你的实际业务需求调整判断逻辑 queryParams.adminapproval = req.body.approvalStatus; } // 处理type条件 if (type) { // 根据你的实际业务需求调整判断逻辑 queryParams.$or = [ Sequelize.where( Sequelize.fn('concat_ws', ' ', Sequelize.col('firstName'), Sequelize.col('lastName')), { $like: `%${keyword}%` } ), { email: { $like: `%${keyword}%` } }, { company: { $like: `%${keyword}%` } }, { mobileNo: { $like: `%${keyword}%` } }, { city: { $like: `%${keyword}%` } } ]; } // 之后直接把queryParams传入Sequelize查询即可 // 比如:YourModel.findAll({ where: queryParams })
小提示
- 如果你的Sequelize版本是v5及以上,官方推荐使用
Op.like代替$like(需要从Sequelize导入Op),代码会更规范:const { Op } = require('sequelize'); // 把{ $like: ... }替换为{ [Op.like]: ... } - 不用担心SQL注入问题,Sequelize的参数化查询已经帮你处理了用户输入的安全性。
内容的提问来源于stack exchange,提问作者shamon shamsudeen
相关产品推荐
相关产品推荐

