ExpressJS Lanjutan #4 | Search dan Pagination Product

Ahmad Nurul Laiq
3 min readApr 25, 2024

Pengantar

Dalam pengembangan aplikasi web, pencarian dan pagination adalah fitur yang umum ditemui, terutama dalam manajemen produk. Dalam artikel ini, kita akan membahas bagaimana cara menambahkan pencarian dan pagination ke dalam API produk menggunakan ExpressJS dan Sequelize.

Refactory produkController

Untuk memungkinkan pencarian produk berdasarkan nama, kita akan menggunakan operator Op.like dari Sequelize. Dan untuk pagination, kita akan menggunakan query string page dan limit untuk mengontrol jumlah data yang ditampilkan dalam satu halaman. Berikut langkah-langkahnya:

// Route untuk membaca produk dengan pencarian opsional, limit, dan page
exports.getProducts = asyncHandle(async (req, res) => {
const { search, limit, page } = req.query; // Mendapatkan nilai pencarian, limit, dan halaman dari query string

let productsData = ""; // Variabel untuk menyimpan data produk

// Cek apakah ada pencarian, limit, atau halaman yang ditentukan
if (search || limit || page) {
const pageData = parseInt(page) || 1; // Konversi nilai page ke integer, atau gunakan nilai default 1 jika tidak ada
const limitData = parseInt(limit) || 100; // Konversi nilai limit ke integer, atau gunakan nilai default 100 jika tidak ada
const offsetData = (pageData - 1) * limitData; // Menghitung offset untuk query database
const searchData = search || ""; // Jika tidak ada pencarian, gunakan string kosong

// Melakukan pencarian produk dengan Sequelize menggunakan findAndCountAll
const products = await Product.findAndCountAll({
limit: limitData, // Batasan jumlah data yang akan diambil
offset: offsetData, // Mengatur data yang akan dilewati sebelum dimulai mengambil data
where: {
name: {
[Op.like]: `%${searchData}%` // Mencocokkan nama produk dengan pola pencarian
}
}
});
productsData = products; // Menyimpan hasil pencarian ke dalam variabel
} else {
// Jika tidak ada pencarian, limit, atau halaman yang ditentukan, ambil semua produk
const products = await Product.findAndCountAll();
productsData = products; // Menyimpan semua produk ke dalam variabel
}

// Mengembalikan hasil dalam format JSON
return res.status(200).json({
data: productsData
});
});

Penjelasan

  • Dengan menggunakan req.query, kita dapat mendapatkan nilai pencarian (search), batasan jumlah data (limit), dan nomor halaman (page) dari URL.
  • Variabel productsData diinisialisasi kosong untuk menyimpan hasil query database.
  • Mengecek Pencarian, Limit, dan Halaman: Kode melakukan pemeriksaan untuk memastikan apakah ada nilai pencarian, limit, atau halaman yang ditentukan.
  • Jika terdapat nilai pencarian, limit, atau halaman yang ditentukan, maka query akan dijalankan dengan menggunakan Sequelize findAndCountAll. Ini akan mencari produk berdasarkan nama yang cocok dengan pola pencarian yang diberikan.
  • Setelah mendapatkan hasil, data produk dikirim kembali dalam format JSON melalui respons HTTP dengan status 200. Jika tidak ada pencarian, maka seluruh data produk akan dikirim kembali.

Kesimpulan

Dengan menambahkan fitur pencarian dan pagination ke dalam API produk, pengguna dapat dengan mudah menemukan dan menavigasi produk yang mereka butuhkan. Gunakanlah fitur ini untuk meningkatkan pengalaman pengguna dalam menggunakan aplikasi Anda.

Dengan demikian, kita telah menyelesaikan implementasi pencarian dan pagination pada API produk dengan menggunakan ExpressJS dan Sequelize. Jika Anda memiliki pertanyaan lebih lanjut, jangan ragu untuk bertanya.

Jika Anda ingin melihat contoh kode yang lengkap, Anda dapat mengunjungi repositori GitHub saya di sini.

Referensi:

  • https://sequelize.org/docs/v6/core-concepts/model-querying-basics/#limits-and-pagination
  • https://sequelize.org/docs/v6/core-concepts/model-querying-basics/#operators

--

--

Ahmad Nurul Laiq

full stack developer an have experience for 2+ years. I am always eager to learn and stay abreast of the latest technology in the world of software development.