Gorm中 使用Scope 分页的代码案例

44 min read
  1. 安装 sequelize 和 mysql2
npm install sequelize mysql2
  1. 对于定义 models 的文件 models/common.js,设置好数据库连接
const { Sequelize } = require('sequelize');

const sequelize = new Sequelize({
  database: 'database_name',
  username: 'username',
  password: 'password',
  host: 'host',
  dialect: 'mysql',
  logging: false,
});

module.exports = sequelize;
  1. 在对应的 model 文件中,定义一个 scope 方法,用于处理分页查询逻辑
const { Model, DataTypes, Op } = require('sequelize');
const sequelize = require('./common');

class User extends Model {}
User.init({
  id: {
    type: DataTypes.INTEGER,
    autoIncrement: true,
    primaryKey: true,
  },
  name: {
    type: DataTypes.STRING,
    allowNull: false,
  },
  age: {
    type: DataTypes.INTEGER,
    allowNull: false,
  },
}, {
  sequelize,
  modelName: 'user',
  scopes: {
    paginated: (page = 1, pageSize = 10) => ({
      offset: (page - 1) * pageSize,
      limit: pageSize,
    }),
  },
});

module.exports = User;
  1. 在业务代码中使用 scope 方法
const User = require('./models/user');

// 查询第 2 页,每页 10 条数据
const users = await User.scope('paginated').findAll({
  where: {
    age: {
      [Op.gt]: 20,
    },
  },
});

这样就可以方便地实现分页查询,调用 scope 方法可以链式调用多个 scope。