‫Instruktur: Dalam video ini, saya ingin,
‫dengan sangat cepat, memfaktorkan ulang fitur API yang telah kita
‫terapkan selama beberapa kuliah terakhir.
‫Sekarang, ini tidak hanya membuat kode kita sedikit lebih bersih,
‫tetapi juga membuatnya lebih modular dan lebih dapat digunakan kembali di
‫masa mendatang.
‫Jadi, sekarang, kita memiliki semua kode ini
‫untuk fitur yang kita buat sebelumnya di fungsi getALLTours ini, bukan?
‫Dan ini terlihat agak berantakan.
‫Agak sulit dimengerti, oke?
‫Dan, bayangkan juga bahwa kami ingin menggunakan fitur yang sama ini untuk
‫sumber daya lain.
‫Misalnya, untuk pengguna atau, nanti, untuk ulasan.
‫Akan sangat tidak praktis untuk, pada dasarnya,
‫menyalin kode dari sini dan menggunakannya,
‫kemudian, di sumber lain, benar.
‫Jadi, yang akan saya lakukan
‫adalah, sekarang, membuat kelas di mana saya akan menambahkan
‫satu metode untuk setiap fitur atau fungsi API ini, seperti yang mungkin
‫Anda sebut juga.
‫Baiklah?
‫Jadi, mari kita lakukan di sini dan saya akan
‫melakukannya di sini, untuk saat ini, kemudian, nanti, saya
‫benar-benar akan mengekspornya ke filenya sendiri, pada
‫dasarnya, untuk membuat modul yang dapat digunakan kembali yang
‫kita dapat , nanti, impor ke pengontrol lain.
‫Baiklah?
‫Jadi, kelas, dan saya menyebutnya APIFeatures.
‫Baiklah.
‫Kemudian, kita mulai dengan fungsi konstruktor
‫kita dan ingat bahwa ini
‫adalah fungsi yang dipanggil secara otomatis segera setelah
‫kita membuat objek baru dari kelas ini, oke.
‫Sekarang, apa yang sebenarnya saya inginkan dalam fitur API ini?
‫Sebenarnya, saya akan mengurai dua variabel di sini, oke?
‫Jadi query luwak dan juga queryString yang kita dapatkan
‫dari express.
‫Jadi, pada dasarnya, berasal dari rute, oke.
‫Jadi itulah yang biasanya kami
‫akses di req. pertanyaan, oke.
‫Sekarang, sekali lagi, saya meneruskan kueri di sini karena saya
‫tidak ingin kueri di dalam kelas ini karena itu akan memantulkan
‫kelas ini ke sumber daya tur, tetapi, sekali lagi,
‫saya ingin ini dapat digunakan kembali semaksimal mungkin.
‫Baiklah.
‫Jadi, apa yang biasanya kita lakukan dalam
‫fungsi konstruktor ini adalah mengatakan ini. kueri sama dengan kueri yang kami dapatkan sebagai
‫argumen dan kemudian ini. queryString
‫sama dengan queryString.
‫Oke?
‫Jadi sangat sederhana, fungsi konstruktor yang sangat khas.
‫Dan sekarang, seperti yang saya sebutkan, saya
‫akan membuat satu metode untuk setiap fungsi, dimulai dengan filter.
‫Baiklah.
‫Jadi, sekarang mari kita lanjutkan dan potong kode dari sini.
‫Atau, sebenarnya, saya akan menyalinnya dan mereka
‫mengomentarinya, sehingga saya tidak melakukan kerusakan yang tidak disengaja.
‫Jadi, salin dan
‫komentar dan taruh di sini.
‫Jadi, beberapa hal yang perlu kita ubah.
‫Pertama, permintaan. kueri tidak akan tersedia di
‫dalam kelas ini.
‫Jadi, itulah mengapa kami benar-benar mem-parsing di queryString.
‫Jadi, ini di sini akan diganti dengan
‫ini. string kueri.
‫Oke?
‫Jadi, sekali lagi, ini hanya Javascript dasar.
‫Sebenarnya tidak ada hubungannya dengan Note atau Express sama sekali.
‫Kemudian sisanya di sini oke tapi ini di sini tidak oke sama sekali.
‫Jadi saya tidak ingin menanyakan tur secara langsung di sini, ingat, tetapi
‫sebaliknya, saya hanya ingin menambahkan temuan ini
‫ke kueri yang sudah kita miliki.
‫Jadi ini. pertanyaan. menemukan
‫dan, yang kemudian akan ini.
‫Baiklah?
‫Mari, sekarang, singkirkan ini.
‫Dan sebelum kita menambahkan metode lagi di sini, mari
‫kita lanjutkan dan gunakan kelas ini agar ini
‫lebih masuk akal bagi Anda.
‫Oke?
‫Jadi, bagaimana ini sebenarnya akan berhasil?
‫Dan saya akan melakukan semuanya di sini di akhir
‫di sini di bawah Execute Query.
‫Baiklah?
‫Jadi, yang bisa saya lakukan sekarang adalah
‫membuat variabel bernama Features, misalnya.
‫Dan kemudian dari sini, saya akan membuat objek fitur API baru.
‫Oke?
‫Jadi, pada dasarnya, membuat instance dari fitur API ini yang
‫kemudian akan disimpan ke dalam Features.
‫Dan di sini, kita akan, kemudian, memiliki akses
‫ke semua metode yang akan kita definisikan dalam definisi kelas.
‫Oke?
‫Jadi, ingat, di sini, kita perlu melewatkan
‫kueri dan kueriString.
‫Jadi, pertanyaannya, bagaimana kita membuatnya?
‫Ingat, ini Tur. Temukan.
‫Jadi, ada objek kueri dan, itulah yang kami uraikan
‫ke dalam kelas ini dan kemudian, tentu
‫saja, kueriString yang merupakan req. pertanyaan.
‫Oke, sekarang, pada fitur ini di sini, ingat,
‫kami tidak memiliki akses ke filter.
‫Jadi, mari kita letakkan di sini setelahnya.
‫Jadi, . Saring.
‫Berikan simpanan.
‫Jadi, seperti ini, kita akan
‫menjalankan atau membuat kode untuk fungsionalitas pemfilteran API.
‫Kemudian, di sini, baris berikutnya, tentu saja,
‫tidak akan berfungsi karena kueri ini di
‫sini tidak ada lagi.
‫Sebaliknya, apa yang kita miliki sekarang adalah fitur. pertanyaan, kan?
‫Jadi setelah semua pemrosesan ini sekarang, pada dasarnya.
‫Oke, jadi, sekarang, setelah filter ini, ini. query kemudian akan
‫memiliki metode find baru ini di atasnya.
‫Oke, dan sekali lagi, ini kemudian disimpan dalam ini. pertanyaan.
‫Dan, nanti, kita akan memiliki semua metode lain yang, semuanya,
‫akan memanipulasi ini. query sehingga,
‫pada akhirnya, ini. query adalah query
‫yang ingin kita eksekusi.
‫Jadi, seperti di sini.
‫Oke, jadi, seperti di sini, kami selalu memanipulasi
‫variabel kueri.
‫Kami terus menambahkan lebih banyak dan lebih
‫banyak metode ke dalamnya sampai kami, kemudian, mengeksekusinya di akhir.
‫Jadi, di sini, kami melakukan hal yang persis sama.
‫Kami hanya memindahkan kode ke semua metode ini.
‫Oke?
‫Kemudian, pada akhirnya, seperti yang saya katakan, kueri akan disimpan
‫di dalam properti ini di sini dan, ya, di situlah kita,
‫kemudian, melakukan penantian dan
‫mendapatkan kembali hasilnya.
‫Baiklah?
‫Bagaimanapun, mari terus bergerak di sini dan menerapkan penyortiran.
‫Jadi, saya menyalin dan berkomentar.
‫Jadi, filter dan yang berikutnya disebut Sortir.
‫Baiklah.
‫Jadi, di sini sekali lagi, kita perlu mengganti request. permintaan dengan
‫ini. queryString, oke.
‫Dan kemudian, kueri sekarang ini. pertanyaan.
‫Jadi mari kita empat ini dalam hal ini. pertanyaan.
‫Oke, sekarang, tujuannya di sini adalah untuk
‫menghubungkan metode ini di sini satu demi satu.
‫Jadi izinkan saya menunjukkannya kepada Anda di sini.
‫Jadi kami memiliki filter dan kemudian, setelah itu,
‫kami ingin merantai metode pengurutan.
‫Sekarang, saat ini, itu tidak benar-benar akan
‫berhasil karena di mana kita sebenarnya merantai hal semacam ini?
‫Jadi, pada dasarnya, kami mencoba menyebutnya sebagai hasil dari ini
‫tetapi, sekarang, apa hasil dari ini?
‫Yah, sebenarnya tidak apa-apa karena metode filter
‫ini di sini tidak mengembalikan apa pun, bukan?
‫Sekarang, potongan kode di sini, tentu
‫saja, mengembalikan objek yang baru saja dibuat dan, kemudian,
‫kita dapat mengaitkan metode filter pada objek tersebut.
‫Tetapi metode filter, pada gilirannya, tidak mengembalikan apa pun.
‫Jadi, pada titik ini, kita tidak bisa benar-benar memanggil
‫semacam pada objek, kan?
‫Jadi, solusi sederhana untuk
‫itu, dan mungkin Anda pernah melakukannya sebelumnya dalam kode Anda,
‫adalah sekarang kita harus mengembalikan ini.
‫Jadi, kembalikan ini dan ini hanya keseluruhan objek, oke?
‫Dan hal yang sama, kemudian, di bawah sini.
‫Jadi, kembalikan ini.
‫Untuk, sekali lagi, mengembalikan seluruh objek yang, tentu saja, kemudian
‫memiliki akses ke metode lain ini sehingga kita dapat,
‫kemudian, memanggilnya di sana.
‫Baiklah?
‫Jadi, selanjutnya adalah pembatasan.
‫Dan saya akan menyebut yang satu ini limitFields.
‫Dan itu karena semua metode
‫ini akan memiliki kata kerja ini sebagai nama.
‫Jadi filter, sortir, limit, dan paginate akan menjadi
‫yang berikutnya.
‫Jadi, sekali lagi, req. permintaan sekarang ini. queryString dan kueri
‫di sini sekarang ini. pertanyaan.
‫Baiklah?
‫Kembalikan ini dan ini tidak benar.
‫Oke, dan akhirnya, pagination.
‫Salin, komentar.
‫Jadi, buat halaman.
‫Kembalikan ini dan, tentu saja, kita
‫perlu mengganti req. menanyakan ini.
‫string kueri.
‫Dan kemudian di sini, seperti sebelumnya,
‫ini akan menjadi ini. pertanyaan.
‫Dan saya baru menyadari bahwa di atas
‫sana, tepat di metode pertama, kami tidak melakukannya di sini.
‫Jadi, kami hanya mengatakan ini. kueri dan
‫kemudian menambahkan temukan di sana.
‫Tapi kemudian, tentu saja, kita
‫harus benar-benar menyimpannya ke dalam properti kueri ini.
‫Oke, dan jadi, saya lupa itu.
‫Dan kami mendapat beberapa kesalahan di sini.
‫Baiklah, itu tidak terlalu penting
‫di sini saat ini.
‫Atau, sebenarnya, ini karena baris kode di sini
‫sebenarnya dalam metode paginate kami.
‫Jadi mari kita pergi ke sana.
‫Dan, sebenarnya, saya sebenarnya ingin membicarakan hal ini
‫dengan Anda di sini.
‫Karena, jika dipikir-pikir, meminta halaman
‫berikutnya, yang hasilnya nol, sebenarnya bukan kesalahan.
‫Fakta bahwa tidak ada hasil sudah cukup bagi
‫pengguna untuk menyadari bahwa, pada dasarnya, halaman yang diminta tidak
‫berisi data apa pun.
‫Jadi kita tidak benar-benar membutuhkan kesalahan dalam situasi ini.
‫Jadi, saya akan melanjutkan dan menghapus semua kode ini.
‫Oke?
‫Jadi biarkan aku menyimpannya sekarang di sini.
‫Dan sekarang, tentu saja, kesalahannya hilang.
‫Dan di sini, kita juga masih harus terus
‫menambahkan metode lain tersebut.
‫Jadi, limitFields dan . membuat halaman pagi
‫Simpan dan, sekali lagi, ingat bahwa semua rantai ini di
‫sini hanya berfungsi karena setelah memanggil
‫masing-masing metode ini, kami selalu mengembalikan ini.
‫Dan ini adalah objek itu sendiri yang memiliki akses
‫ke masing-masing metode ini di sini,
‫memungkinkan untuk merantainya seperti yang kita miliki di sini.
‫Oke, jadi, rekapnya: Kami
‫sedang membuat objek baru dari kelas fitur API.
‫Di sana, kami mengurai objek kueri
‫dan string kueri yang berasal dari express.
‫Oke?
‫Kemudian, di masing-masing dari empat metode di sini
‫yang kita panggil satu demi satu, kita, pada dasarnya, memanipulasi kueri.
‫Kami terus menambahkan lebih banyak metode seperti yang
‫telah kami lakukan di sini sebelum kami melakukan refactoring ini, kan.
‫Jadi, kami terus menambahkan hal-hal ke kueri di sini sampai
‫akhir, dan kemudian, pada akhirnya, kami hanya menunggu
‫hasil kueri itu sehingga dapat kembali dengan semua
‫dokumen yang dipilih, oke?
‫Dan kueri itu sekarang tinggal di fitur
‫yang merupakan objek ini di sini.
‫Jadi fitur. pertanyaan.
‫Oke, saya harap itu masuk akal.
‫Jadi, sebelum kita melakukan hal lain, mari kembali ke
‫Postman dan benar-benar mencobanya.
‫Dan kita bisa mencobanya di sini dengan rute Top-5-murah
‫ini karena sebenarnya, di
‫balik layar, menggunakan semua fitur API ini, kan.
‫Jadi, jika saya mengirimnya, itu masih berfungsi.
‫Jadi itu fantastis.
‫Jadi mari kita tutup dan biarkan saya menyimpannya di sini.
‫Jadi, Dapatkan Lima Wisata Murah Teratas.
‫Dan ya, saya akan meninggalkannya di sana pada akhirnya.
‫Dan sekarang, di sini, mari kita lakukan beberapa pengujian.
‫Misalnya, hapus pengurutan, biarkan saya meninggalkan batas.
‫Kesulitan, durasi, harga.
‫Jadi, saya akan meninggalkan semua ini
‫di sini hanya untuk melihat apakah itu masih berfungsi.
‫Dan sepertinya semuanya masih berfungsi, kan.
‫Jadi ini adalah hasil yang sama persis
‫yang kami dapatkan sebelum refactoring kami.
‫Jadi, bagus, sempurna.
‫Itu berhasil dan, mari, sekarang, benar-benar menghapus semua
‫kode ini dari sini yang membuat pengendali rute
‫kita jauh lebih bersih, bukan?
‫Jadi, itu jauh lebih baik, sungguh, ini siang dan malam.
‫Oke?
‫Sekarang, langkah selanjutnya adalah benar-benar
‫melanjutkan dan mengambil semua kode ini, memotongnya dan memasukkannya ke
‫dalam file baru, jadi modul baru, pada dasarnya.
‫Oke, dan untuk itu, saya akan membuat folder baru di sini
‫yang akan saya beri nama Utils.
‫Jadi itu berdiri, pada dasarnya, untuk utilitas.
‫Dan saya akan menambahkan beberapa hal di
‫sini selama sisa kursus.
‫Oke?
‫Jadi yang
‫ini akan disebut APIFeatures. js dan dengan huruf besar F di sini.
‫Baiklah?
‫Jadi, inilah kelas kami dan, pada akhirnya,
‫kami membuat modul. ekspor kelas ini.
‫Jadi, tidak ada yang baru saat ini.
‫Simpan, tutup, dan
‫sekarang, di sini, kita dapat memintanya.
‫Const APIFeatures kemudian membutuhkan.
‫Kemudian kita perlu memindahkan satu
‫folder ke atas, lalu ke Utils dan APIFeatures.
‫Oke?
‫Satu tes lagi.
‫Dan itu membutuhkan waktu, dan ini dia.
‫Indah, itu benar-benar indah.
‫Sekarang, jika kita membuat sumber daya lain lagi, misalnya,
‫untuk pengguna, akan sangat mudah untuk
‫memasukkan fungsi yang sama ini.
‫Yang harus kita lakukan adalah meminta file ini dan kemudian, pada
‫dasarnya, melakukan hal yang sama seperti di sini.
‫Atau mungkin, dalam hal ini, kita bahkan
‫tidak ingin memiliki kemampuan penyortiran ini atau kita tidak
‫ingin memiliki kemampuan penyaringan dan kemudian, yang harus kita
‫lakukan hanyalah mengambil baris kode ini.
‫Dan kemudian, seperti sulap, itu hanya
‫akan melakukan tiga
‫fungsi ini atau tiga fitur ini, oke.
‫Jadi, itu sangat bagus.
‫Saya harap Anda dapat melihat
‫nilai dari ini dan, ya, saya sangat senang dengan hasil ini.