Sequelize ORM menggunakan Filter dan Pagination lebih mudah dan lebih efisien untuk menghandle dan integrasi dengan Table di Front end, biasanya hal ini sangat menyulitkan karena Sequelize
ini tidak menyajikan langsung dengan pagination dan filter di library bawaannya.
Pertama buat class terlebih dahulu untuk mengextract limit
dan offset
seperti ini :
// pagination.js const getPagination = (page, size) => { const limit = size ? +size : 10; const offset = page ? page * limit : 0; return { limit, offset }; };
Penjelasan diatas adalah :
const limit = size ? +size : 10;
diatas menjelaskan request dari front end misal size
itu direquest adalah 10
maka limit yang akan dikirim dari server adalah 10
const offset = page ? page * limit : 0;
Offset diatas adalah yang akan di skip, yg mana fungsi skip ini akan dilewati berapa data
yang tidak akan kita query.
Lalu untuk extraksi data dan menggabungkannya dengan pagination
bisa menggunakan seperti ini :
const getPagingData = (models, page, limit) => { const { count: total, rows: data } = models; const currentPage = page ? +page : 0; const currentPageFront = page ? +page + Number(1) : Number(1); const totalPages = Math.ceil(total / limit - Number(1)); const totalPagesFront = Math.ceil(total / limit); return { data, pagination: { total, totalPages, totalPagesFront, currentPage, currentPageFront, }, }; };
Dan penjelasannya diatas adalah seperti ini :
const { count: total, rows: data } = models;
total
adalah extraksi dari count data yang dikumpulkan. dan rows adalah data dari query yg dihasilkan.
const currentPage = page ? +page : 0;
untuk menentukan currentPage
dibackend yang sedang di page tersebut kita buat parse seperti diatas. Untuk mengetahui posisi page sekarang.
const currentPageFront = page ? +page + Number(1) : Number(1);
untuk menentukan currentPageFront
difrontend yang sedang di page tersebut kita buat parse seperti diatas. Untuk mengetahui posisi page sekarang.
const totalPages = Math.ceil(total / limit - Number(1));
untuk menentukan totalPages
dibackend yang sedang di page tersebut kita buat parse seperti diatas. Untuk mengetahui posisi page sekarang.
const totalPagesFront = Math.ceil(total / limit);
untuk menentukan totalPagesFront
difrontend yang sedang di page tersebut kita buat parse seperti diatas. Untuk mengetahui posisi page sekarang.
Untuk mempassing data dari controller ke Pagination class yang tadi kita buat:
const { getPagination, getPagingData } = require('../utils/pagination'); ... const page = req.query.page || 0; const size = req.query.size || 10; const search = req.query.search || ''; const { limit, offset } = getPagination(page, size);
Fungsi Filter dari Sequelize
seperti berikut :
const { Op } = require('sequelize'); ... const condition = search ? { [Op.or]: { name: { [Op.iLike]: `%${search}%` }, }, } : null;
Selanjutnya kita buat pass data dari controller
const { Model } = require('../models'); const models = await Model.findAndCountAll({ attributes: ['id', 'name', 'created_at'], where: condition, order: sort, limit, offset, }); const response = getPagingData(models, page, limit); res.status(200).json(response);
Demikian tutorial Sequelize Pagination dan Filter di Nodejs, Happy Coding....