‫Narator: Sekarang, fitur lain yang sangat
‫penting dari API yang baik adalah menyediakan pagination.
‫Jadi pada dasarnya memungkinkan
‫pengguna untuk hanya memilih halaman tertentu dari hasil
‫kami, jika kami memiliki banyak hasil.
‫Jadi mari kita berpura-pura bahwa
‫kita memiliki, misalnya, 1000 dokumen dalam koleksi tertentu.
‫Dan kami mengatakan bahwa pada setiap halaman kami memiliki 100 dokumen.
‫Jadi itu berarti kita akan memiliki 10 halaman, kan?
‫Jadi 10 kali 100 adalah 1000.
‫Dan berdasarkan itu, bagaimana kita akan menerapkan pagination
‫menggunakan atau string kueri?
‫Nah, kita akan menggunakan bidang halaman dan pembatas.
‫Jadi akan ada bidang halaman.
‫Katakanlah kita ingin halaman dua dan
‫akan ada bidang batas.
‫Dan batas ini di sini pada dasarnya berarti
‫jumlah hasil yang kita inginkan per halaman.
‫Dan itu sebenarnya diatur di sini hanya untuk 10 dan tentu
‫saja kita harus memperbaiki yang ini di sini.
‫Ini bukan koma, tapi dan.
‫Jadi halaman dua dan batas 10.
‫Sekarang kembali ke contoh 1000 hasil, jika batasnya
‫adalah 10, jadi hanya 10 hasil per halaman, maka
‫kita akan memiliki 100 halaman
‫dan di sini kita menampilkan halaman nomor 2
‫dari 100 halaman tersebut.
‫Oke?
‫Sekarang, kita membutuhkan cara untuk mengimplementasikan ini menggunakan Mongoose.
‫Jadi mari kita lihat bagaimana kita bisa melakukannya dengan
‫kembali ke kode kita.
‫Jadi fitur nomor empat,
‫Pagination.
‫Baiklah, Dan
‫saya akan mulai dengan membuat contoh kueri di
‫sini seperti yang kita lakukan sebelumnya.
‫Jadi katakanlah kueri adalah kueri yang sama.
‫Dan sekarang metode seperti apa yang
‫kita miliki untuk mengimplementasikan pagination?
‫Nah, yang paling berguna adalah lewati dan saya
‫akan menjelaskan apa fungsinya sebentar lagi, jadi mari kita
‫masukkan angka acak di sini.
‫Jadi lewati dan batasi, dan mari
‫kita masukkan 10.
‫jadi batas ini di sini sebenarnya sama persis dengan
‫batas yang kita definisikan di string kueri.
‫Jadi pada dasarnya jumlah hasil yang
‫kita inginkan dalam query.
‫Dan kemudian lewati, yang kita miliki di sini, adalah jumlah
‫hasil yang harus dilewati sebelum benar-benar meminta data.
‫Baiklah, sekali lagi, ini hanya pengganti di sini.
‫Mari kita kembali ke contoh yang kita miliki di sini.
‫Saya hanya akan menyalin string kueri ini di sini.
‫jadi katakanlah pengguna menginginkan halaman nomor dua
‫dengan 10 hasil per halaman.
‫Itu artinya hasil satu sampai 10 ada di halaman satu, dan
‫11 sampai 20 ada di halaman 2.
‫Oke, jadi itu artinya kita ingin melewatkan 10 hasil
‫sebelum kita benar-benar mulai membuat kueri.
‫Oke.
‫Jadi sekali lagi, satu sampai 10
‫untuk halaman satu dan
‫kemudian 11 sampai 20 untuk halaman
‫dua, dan
‫seterusnya dan seterusnya.
‫Jadi 21 sampai 30 akan menjadi halaman tiga, Dan
‫seterusnya dan seterusnya.
‫Jadi kita harus melewati
‫10 hasil untuk mendapatkan hasil nomor 11, bukan?
‫Jadi untuk hasil nomor 11 yang akan menjadi yang pertama di halaman dua.
‫Oke, dan karena itu adalah halaman kedua yang diminta, sekali
‫lagi kita harus melewati 10 hasil sebelum
‫kita benar-benar memulai halaman kedua.
‫Oke? Masuk akal?
‫Dan misalnya, jika kita meminta halaman nomor tiga,
‫maka tentu saja, 20 hasil
‫pertama harus dilewati.
‫Jadi kita akan membutuhkan
‫beberapa cara untuk menghitung nilai lompatan ini di sini.
‫Jadi dasarnya berdasarkan halaman dan limit.
‫Sekarang Anda mungkin bertanya mengapa saya tidak langsung meminta
‫nilai lewati dalam string kueri,
‫tetapi itu karena bagi pengguna nilai ini di
‫sini agak abstrak, oke?
‫Jauh lebih mudah untuk mengatakan, "Saya ingin halaman nomor satu," atau saya ingin halaman
‫nomor lima "atau saya ingin seperti
‫halaman nomor 10. " Oke,
‫jadi bagi pengguna itu jauh lebih mudah untuk
‫tidak berurusan dengan nilai lompat di
‫sini dan semua itu, pengguna ingin membuatnya
‫mudah dan hanya mendefinisikan halaman.
‫Sekarang sebelum kita benar-benar
‫dapat mulai menghitung nilai lewati, kita harus terlebih dahulu mendapatkan
‫halaman dan batas dari string kueri
‫dan kita juga harus menentukan beberapa nilai default.
‫Oke, jadi itu pada
‫dasarnya karena kami masih ingin memiliki
‫pagination meskipun pengguna tidak menentukan halaman atau
‫batasan apa pun.
‫Karena misalnya, katakanlah kita memiliki sejuta hasil di
‫database kita, dan
‫tentu saja ketika pengguna melakukan permintaan, kita
‫tidak akan begitu saja menampilkan semua 10 juta hasil ini.
‫Itu tidak akan sangat ramah pengguna, bukan?
‫Jadi, saya akan mendefinisikan secara default nomor halaman
‫satu dan batas katakanlah 100.
‫Sehingga secara default ketika pengguna meminta semua tur dalam
‫contoh ini, maka dia hanya mendapatkan 100,
‫dan bukan satu juta, oke?
‫Jadi halaman itu tentu saja permintaan. pertanyaan. page dan sekarang
‫saya akan mengalikannya dengan satu yang
‫merupakan trik yang bagus untuk
‫mengubah string menjadi angka.
‫Oke, jadi mungkin Anda memperhatikan sebelumnya bahwa setiap kali kita
‫benar-benar memasukkan angka ke dalam
‫string kueri, itu akan menjadi string atau objek
‫kueri, jadi kita perlu memperbaikinya hanya dengan mengalikannya dengan satu.
‫Oke, dan kemudian secara default, kami ingin halaman nomor satu.
‫Baiklah?
‫Jadi ini adalah cara yang
‫bagus dalam JavaScript untuk mendefinisikan nilai default pada dasarnya.
‫Dan saya yakin Anda sudah familiar dengan itu, bukan?
‫Bagaimanapun, batasnya adalah pada req. pertanyaan. batasi kali
‫satu lagi untuk mengonversinya, atau
‫default 100 yang baru saja kami sebutkan.
‫Jadi idealnya pengguna hanya akan menentukan nomor halaman yang dia
‫minta dan
‫bahkan tidak peduli dengan batas halaman.
‫Itu untuk kasus penggunaan yang lebih spesifik.
‫Oke, dan sekarang yang perlu kita lakukan adalah mendefinisikan jadi menghitung pada
‫dasarnya nilai
‫lompatan yang baru saja kita bicarakan di sini sebelumnya.
‫Dan cara terbaik untuk melakukannya adalah kembali ke contoh.
‫Jadi sekali lagi, katakanlah kita meminta halaman nomor tiga,
‫dengan batas 10.
‫dan kita lihat disini untuk halaman nomor tiga hasilnya
‫dari 21 sampai 30.
‫Jadi dimulai dari hasil nomor 21, artinya kita
‫harus melewatkan 20 hasil.
‫Dan 20 hasil pada dasarnya adalah dua kali
‫10, jadi dua kali batas ini.
‫Oke, dan dari sana kita sebenarnya mulai mendapatkan formula.
‫Jadi dua kali sepuluh pada dasarnya adalah tiga dikurangi satu kali 10.
‫Dan tiga adalah halaman tempat kita berada.
‫Jadi itulah rumus kami.
‫Jadi halaman dikurangi satu
‫dan halaman sebelumnya, pada
‫dasarnya, kali
‫batas.
‫Oke, jadi saya harap itu masuk akal, sekarang
‫mari kita ganti nilai-nilai ini di sini.
‫Lewati
‫dan batasi batas.
‫Oke?
‫Jadi pada dasarnya, angka ini adalah semua hasil yang
‫muncul sebelum halaman yang sebenarnya kami minta sekarang.
‫Jadi sekali lagi, jika kita meminta halaman nomor tiga,
‫hasil kita akan dimulai dari halaman nomor 21.
‫Jadi kami ingin melewatkan 20 hasil sebelum itu.
‫Jadi 20 hasil karena
‫kami memiliki 2 halaman waktu 10 hasil pada masing-masing,
‫Ya, itu akan menjadi halaman yang baru saja kami minta.
‫Jadi halaman di sini, dikurangi satu,
‫jadi halaman sebelumnya dikalikan dengan jumlah hasil pada
‫setiap halaman.
‫Oke, jadi itu jumlah dokumen yang
‫akan dilewati.
‫Oke, jadi saya harap itu masuk akal.
‫Sekarang mari kita lanjutkan dan benar-benar mencoba ini.
‫Dan karena kami hanya memiliki sedikit hasil di sini,
‫kami perlu mengujinya dengan batas yang sangat kecil.
‫Jadi katakanlah kita hanya menginginkan tiga hasil per halaman, dan mari kita
‫mulai dari halaman nomor satu.
‫Jadi kirimkan, dan memang sekarang kami hanya mendapatkan tiga hasil
‫seperti yang Anda lihat di sini.
‫Jadi ketiganya, mari kita lihat.
‫Jadi The Forest Hiker, The
‫Sea Explorer, dan The
‫City Wanderer.
‫Oke?
‫Mari kita coba halaman nomor
‫dua, dan untuk beberapa alasan tukang pos
‫terus melompat-lompat setiap kali saya mengubah URL.
‫Anyway, sekarang kita punya The Park
‫Camper, The Snow
‫Adventurer, dan The Sports Lover.
‫Jadi Anda mulai melihat bahwa
‫kami sekarang memiliki tur yang berbeda.
‫Oke?
‫Jadi kita bisa mengatakan bahwa pagination kita
‫di sini sudah berfungsi.
‫Sekarang halaman terakhir, dan
‫sekarang kita memiliki The Northern Lights,
‫The Wine
‫Taster, dan The Star Gazer.
‫Baiklah?
‫Sekarang bagaimana jika kita mencoba ke halaman nomor empat?
‫Kami sudah tahu bahwa kami hanya memiliki
‫sembilan tur, dan pada halaman nomor empat seharusnya tidak ada apa-apa.
‫Benar?
‫Jadi mari kita uji itu.
‫Dan memang kita mendapatkan hasil nol.
‫Tapi itu tentu saja tidak ideal.
‫Oke, jadi sekarang mari kita perbaiki dan
‫pada dasarnya muncul kesalahan setiap kali pengguna
‫memilih halaman yang tidak ada.
‫Karena pada dasarnya itulah situasi di sini.
‫Pengguna meminta halaman yang sama sekali tidak ada.
‫Kami tidak memiliki hasil yang cukup untuk memiliki empat halaman dengan
‫tiga hasil.
‫Sekarang mari kita lakukan itu, dan
‫ini sebenarnya hanya
‫akan terjadi ketika ada halaman pada kueri
‫dan jadi mari kita buat pernyataan if ini di sini.
‫Jadi jika permintaan. pertanyaan. halaman, hanya dalam kasus
‫ini kami akan menguji apakah kami melewatkan lebih
‫banyak tur daripada yang sebenarnya kami miliki.
‫Jadi mari kita dapatkan jumlah tur.
‫Jadi jumlah tur sama dengan, dan sekarang kita benar-benar
‫akan mempelajari metode baru.
‫Jadi ada metode baru
‫pada model Tour yang disebut countDocuments.
‫Oke? Dan seperti namanya,
‫ini akan mengembalikan jumlah dokumen, oke?
‫Sebenarnya akan mengembalikan janji tapi
‫kita kemudian menunggu janji
‫dan kemudian akan
‫kembali dengan hasil jumlah tur.
‫Oke? Jadi jika jumlah dokumen yang
‫kita lewati lebih besar dari jumlah dokumen yang benar-benar
‫ada dengan baik maka itu berarti halaman tersebut tidak ada, oke?
‫Masuk akal?
‫Jadi jika melewatkan lebih besar dari jumlah tur, dan
‫untuk saat ini yang
‫akan saya lakukan di sini adalah membuat kesalahan baru.
‫Oke?
‫Jadi membuang
‫kesalahan baru halaman ini tidak ada.
‫Sekarang mengapa saya melempar kesalahan di sini?
‫Yah, hanya karena jika saya melempar kesalahan
‫di sini di triblock tempat kita berada saat
‫ini, maka
‫akan secara otomatis dan segera pindah ke
‫blok catch, dan kemudian akan mengirim kembali jenis 404 pesan gagal ini.
‫Oke?
‫Dan itulah yang kami inginkan untuk saat ini.
‫Ingatlah bahwa kami akan menerapkan penanganan kesalahan yang jauh
‫lebih baik nanti di kursus.
‫Dan sebenarnya tepat di bagian selanjutnya, oke?
‫Tapi untuk saat ini mari kita sederhanakan
‫saja, buang kesalahan ini di sini
‫jika kita mencoba melewati lebih banyak dokumen daripada yang
‫sebenarnya kita miliki.
‫Oke?
‫Jadi ini kasus yang tepat, mari kita kirim ke
‫sini dan itu bukan hasil yang saya harapkan
‫jadi mari kita
‫kembali jadi sekarang halaman kita adalah
‫empat dan batasnya adalah tiga.
‫Jadi lompatan di sini adalah tiga kali tiga, jadi sembilan, oke?
‫Dan jumlah tur juga sembilan dan jadi skip
‫tidak lebih besar dari jumlah tur dan oleh karena itu
‫kami tidak mendapatkan kesalahan ini.
‫Jadi yang perlu kita lakukan adalah mengaturnya menjadi lebih besar atau sama.
‫Oke, dan itu sekarang harus berfungsi.
‫Dan itu memakan waktu lama, dan
‫itu berhasil.
‫Sekarang kita mendapatkan status gagal di sini
‫dan 404.
‫Untuk
‫beberapa alasan kesalahan ini tidak muncul
‫di sini yang seharusnya.
‫Tapi jangan khawatir tentang itu, itu tidak terlalu penting.
‫Yang penting adalah bahwa itu benar-benar memasuki blok tangkapan kami,
‫dan kemudian mengirim kembali respons 404 ini.
‫Segala sesuatu yang lain kita akan menerapkan sedikit kemudian.
‫Oke, dan itu sebenarnya.
‫Jadi itu semua metode yang akan kami tambahkan ke
‫kueri kami, dan ketika kami akhirnya mencapai baris kode berikutnya
‫di sini, kueri kami
‫kemudian akan ditunggu, dan kembali dengan tur.
‫Oke, dan pada titik ini kueri kita mungkin
‫benar-benar terlihat seperti
‫ini, kira-kira seperti apa yang
‫kita
‫miliki di sini kita telah mengurutkan,
‫memilih, jadi kita
‫mungkin memiliki pengurutan, dan
‫kemudian beberapa pilih di
‫sana kita
‫juga melewatkan kita memiliki batas
‫juga, dan itu benar-benar semacam pertanyaan besar.
‫Dan lagi, yang memungkinkan kita untuk
‫itu adalah bahwa masing-masing metode ini di sini
‫akan selalu mengembalikan kueri baru yang kemudian dapat
‫kita rantai
‫pada metode berikutnya dan metode selanjutnya, dan metode selanjutnya hingga akhirnya
‫kita menunggu kueri sehingga dapat benar-benar memberi kami dokumen kami.
‫Oke, jadi mari kita singkirkan semua komentar ini dan
‫ya, itu saja untuk saat ini.
‫Untuk fitur ini kita hanya akan menambahkan satu
‫lagi di kuliah berikutnya,
‫tapi yang itu akan sedikit berbeda dari ini.
‫Itu tidak akan menggunakan salah satu metode kueri ini, oke?
‫Jadi saya harap selama beberapa kuliah
‫terakhir Anda benar-benar mempelajari
‫seluk beluk kueri data dengan Mongoose.
‫Jadi tentu saja, semua metode yang kami gunakan
‫tidak hanya berguna untuk fitur-fitur yang kami implementasikan di sini.
‫Anda benar-benar dapat membuat semua
‫jenis kueri yang dapat Anda bayangkan untuk semua jenis aplikasi.
‫Jadi saya menunjukkan kepada Anda semua teknik di
‫sini dalam konteks fitur API yang berbeda
‫ini, tetapi tentu saja Anda
‫akan dapat menggunakannya di seluruh aplikasi Anda di masa mendatang, oke?
‫Jadi saya harap itu menyenangkan
‫bagi Anda dan jika ya, mari kita lanjutkan sekarang ke yang berikutnya.
‫Sampai ketemu lagi!