Sequelize Pagination

Add a method on a sequelize model for pagination queries

The project is inspired by sequelize-simple-pagination

Quick start

Define a sequelize model and add a pagination method:

// Define a model
const withPagination = require('sequelize-pagination');

const Counter = sequelize.define('counter', {
  id: { type:  Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
  value: Sequelize.INTEGER,
});

const options = {
  methodName: 'paginate', // the name of the pagination method
  primaryKey: 'id',       // the primary key field of the model
};

// Add a pagination method for the model
withPagination(options)(Counter);

Call the paginate (default method name) method:

Counter.paginate({
  pageIndex: 0,
  pageSize: 10,
})
.then(pagination => {
    console.log(pagination.entities)
})

The paginate method returns a promise with resolve data of SequelizePaginationResult type.

Use examples

Predefine pagination

withPagination({
    pageSize: 3,                            // Fix page size
})(Counter);

example/PredefinePagination.js

Custom pagination

Create a pagination with orderBy, order options

async function paginateCounter(options) {
    const {orderBy, order, ...others} = options;
    const result = await Counter.paginate({
        orders: [[orderBy, order]],
        ...others,
    });
    return {orderBy, order, ...result};
}

example/CustomPagination-OrderBy.js

API

withPagination(options) - for adding pagination method

withPagination() is a function generator for remember pagination configuration.

options is a object with following properties:

  • methodName: the name of the pagination method. Default: paginate
  • primaryKey: the primary key field of the model. Default: id
  • oneBaseIndex: page index base. Pag index starts from 0 if oneBaseIndex is false. Page index starts from 1 if oneBaseIndex is true. Default: false
  • pageSize: Default: 1
  • where: the query applied to findAll and pass value directly to where
  • array: the query applied to findAll and add a primary key to order
  • attributes: the query applied to findAll and pass value directly to attributes
  • include: the query applied to findAll and pass value directly to include

paginate(options) - execute a pagination query (suppose options.methodName is paginate)

options is a object with following properties:

  • primaryDesc: primary key desc order. Default: false
  • pageSize: Default: 1
  • pageIndex: Pag index starts from 0 if oneBaseIndex is false. Page index starts from 1 if oneBaseIndex istrue.
  • where: the query applied to findAll and pass value directly to where
  • array: the query applied to findAll and add a primary key to order
  • attributes: the query applied to findAll and pass value directly to attributes
  • include: the query applied to findAll and pass value directly to include

return a promise with resolve data of SequelizePaginationResult type.