sequelize模糊查询及分页

首先模糊查询要用到Op,一定要导入,否则会报错

// 使用模糊查询需要先引入Op
const seq = require('sequelize');
const Op = seq.Op;

然后是查数量,本人习惯是先查数量,不为0再去查详细数据:

这里的 user_name就是本人要检索的字段, ${user_name} 中的user_name是前端传的:

let count = await User.count({
            where: {
                user_name: {
                    [Op.like]: `%${user_name}%`
                },
            }
        });

查详细列表同理,使用 attributes 过滤掉密码字段,使用 limit和offset来分页,pageSize和pageIndex是前端传的分页数据;

 let res = await User.findAll({
                attributes: {exclude: ['password']},
                where: {
                    user_name: {
                        [Op.like]: `%${user_name}%`
                    },
                },
                limit: pageSize,
                offset: (pageIndex - 1) * pageSize
            });

最后贴上完整的方法,可供大家参考:

// 使用模糊查询需要先引入Op
const seq = require('sequelize');
const Op = seq.Op;


async getUserList({id, user_name, is_admin, pageInfo}) {
        let whereObj = {};
        id && Object.assign(whereObj, {id});
        is_admin && Object.assign(whereObj, {is_admin});
        // 加入模糊查询
        user_name && Object.assign(whereObj, {
            user_name: {
                [Op.like]: `%${user_name}%`
            },
        });

        // 查数量
        let count = await User.count({where: whereObj});
        let res;
        if (count !== 0) {
            let _pageInfo = {};
            if (pageInfo) {
                let {pageIndex, pageSize} = JSON.parse(pageInfo);
                _pageInfo = {
                    limit: pageSize,
                    offset: (pageIndex - 1) * pageSize
                }
            }
            res = await User.findAll({
                attributes: {exclude: ['password']},
                where: whereObj,
                ..._pageInfo
            });
        }
        return {list: res, count: count} || null;
    }


版权声明:本文为qq_23521659原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。