‫-: Dalam video ini, mari kita
‫buat jenis middleware khusus yang disebut param middleware.
‫Jadi param middleware adalah middleware yang hanya berjalan untuk
‫parameter tertentu, jadi pada dasarnya,
‫ketika kita memiliki parameter tertentu di URL kita.
‫Sekarang dalam contoh kita di sini,
‫satu-satunya parameter yang mungkin kita miliki di URL rute kita adalah id, bukan?
‫Jadi kita bisa menulis middleware yang
‫hanya berjalan ketika id ini ada di
‫URL, oke, jadi izinkan saya menunjukkan cara melakukannya.
‫Sebenarnya cukup sederhana, jadi ada di
‫router kami dan kemudian metode param, oke.
‫Jadi di sini kita tentukan terlebih dahulu
‫parameter yang sebenarnya ingin kita cari, jadi
‫pada dasarnya parameter yang
‫akan dijalankan middleware ini, dan itu disebut id, dan
‫tentu saja fungsi middleware kita yang sebenarnya.
‫Dan seperti biasa, kita memiliki akses ke permintaan
‫dan ke objek
‫respons, dan kemudian merasakan fungsi
‫middleware juga ke fungsi berikutnya, bukan?
‫Sekarang dalam fungsi
‫middleware param, kita sebenarnya mendapatkan akses ke argumen
‫keempat dan itu adalah nilai dari parameter yang dimaksud.
‫Jadi kami biasanya menyebutnya satu val, yang berarti nilai.
‫Jadi sekarang kita dapat melanjutkan dan
‫cukup login ke
‫konsol, hanya untuk melihat apakah ini benar-benar berfungsi, jadi katakanlah Tour
‫id adalah dan kemudian id, bukan?
‫Selanjutnya, kita juga harus menelepon berikutnya, kan?
‫Karena jika tidak, siklus respons permintaan
‫akan macet di fungsi
‫middleware ini dan tidak akan bisa
‫pindah ke middleware berikutnya di tumpukan, bukan?
‫Yang akan menjadi rute ini di sini.
‫Baiklah, jadi mari kita simpan dan periksa sekarang.
‫Dan kami menginginkannya bukan untuk
‫mendapatkan semua pengguna tetapi untuk mendapatkan satu Tur, bukan?
‫Baiklah saya tunjukkan
‫dulu apa yang terjadi jika kami tidak memiliki id, oke, dan sekarang,
‫kami tidak melihat log down di konsol kami.
‫Tetapi jika saya sekarang mengirim permintaan yang sama pada
‫rute ini di mana kami memiliki id, mari kita lihat apa yang terjadi kemudian.
‫Oh, itu memberitahu saya bahwa id tidak
‫didefinisikan, dan memang itu bukan id, jadi itu adalah kesalahan bodoh.
‫Jadi itu adalah val untuk nilai, kan?
‫Jadi ingat bagaimana saya mengatakan bahwa parameter nilai ini
‫adalah yang benar-benar
‫akan menyimpan nilai parameter id, dan tentu saja
‫itulah yang perlu kita gunakan di sini
‫untuk mendapatkan akses ke id itu.
‫Jadi mari kita coba lagi, dan
‫sekarang memang Tour id kita ada dua, kan?
‫Jadi log itu berasal langsung dari fungsi ini di sini.
‫Sekarang, yang juga ingin saya
‫tunjukkan kepada Anda adalah bahwa fungsi middleware
‫ini tidak akan berjalan untuk rute pengguna mana pun.
‫Jadi katakanlah kita memanggil pengguna dengan id tertentu, jadi mari
‫kita salin yang ini di
‫sini, buat permintaan baru dengan id, dan biarkan
‫saya menyimpannya juga.
‫Jadi dapatkan pengguna dan simpan ke pengguna, dan ketika saya mengirimnya ke sini, kami
‫tentu saja mendapatkan respons standar
‫kami tentang rute ini tidak ditentukan, tetapi Anda
‫juga melihat bahwa kami tidak memiliki log seperti sebelumnya.
‫Dan tentu saja karena fungsi middleware ini
‫hanya ditentukan di router tur kami.
‫Jadi dalam aplikasi mini lokal semacam ini,
‫sekali lagi, itulah analogi yang ingin saya buat.
‫Jadi pada dasarnya setiap
‫router adalah jenis sub-aplikasi mini, satu untuk setiap sumber daya.
‫Dan karena middleware ini hanya ditentukan pada router ini,
‫maka tentu saja,
‫itu hanya bagian dari tumpukan
‫middleware jika kita benar-benar berada di dalam sub-aplikasi ini.
‫Masuk akal?
‫Jadi misalkan kita memiliki permintaan masuk pada tur/id.
‫Jadi permintaan itu akan melalui semua middleware ini, jadi
‫pertama middleware ini, lalu yang ini, lalu
‫middleware ini, lalu yang ini, jadi semua ini
‫adalah bagian dari tumpukan middleware dan
‫akhirnya akan mengenai middleware ini dan karena
‫ini adalah sebenarnya rute
‫tersebut, kemudian akan masuk ke middleware tourRouter.
‫Oke, dan dari sana kemudian langsung masuk ke middleware ini,
‫dan kemudian kode ini akan dijalankan.
‫Dan sekali lagi, itu hanya karena ia memiliki id di rute.
‫Jika tidak, yah, maka ini akan diabaikan begitu
‫saja dan akan berpindah ke middleware
‫berikutnya di tumpukan, jadi ini di bawah sini, kan?
‫Keren, jadi begitulah cara kerja middleware param; tetapi untuk
‫saat ini itu tidak terlalu berguna.
‫Tapi kita sebenarnya bisa menggunakannya
‫untuk kasus penggunaan yang sangat praktis di sini.
‫Jadi mari kita pergi ke fungsi handler kami di
‫sini dan Anda melihat bahwa di semua
‫fungsi handler yang benar-benar menggunakan id, kami memeriksa apakah id tersebut valid.
‫Jadi kami melakukannya di sini dalam mendapatkan tur, dan kami
‫juga melakukannya di tur pembaruan, jadi di sini, dan di hapus tur.
‫Jadi ketiga fungsi ini memiliki kode yang sangat mirip
‫di mana mereka memeriksa apakah id
‫itu valid dan jika tidak, mereka mengirim kembali tanggapan Invalid ID ini.
‫Jadi kita memiliki semua kode ini
‫di tempat yang sama dan seperti yang sudah
‫Anda ketahui, bukanlah praktik yang baik untuk mengulang kode
‫dan jadi yang bisa kita lakukan di sini
‫adalah menggunakan konsep middleware param; dan lakukan pemeriksaan ini
‫di middleware luar yang akan
‫dijalankan bahkan sebelum permintaan mengenai fungsi handler ini.
‫Jadi mari kita salin atau potong
‫kode dari sini dan buat fungsi middleware
‫baru bernama checkID, dan tentu saja saya juga perlu mengekspornya.
‫Jadi checkID dan kami memiliki akses, permintaan, respons, berikutnya,
‫dan lagi, perlu diingat bahwa itu adalah
‫middleware param dan argumen keempat akan
‫menjadi nilai parameter.
‫Oke, tempel di sini, lalu
‫jangan lupa panggil next di akhir middleware, oke?
‫Dan yang juga sangat penting adalah
‫bahwa kami memiliki pernyataan pengembalian ini di sini,
‫karena jika kami tidak memiliki pengembalian ini
‫di sini, maka express akan mengirimkan respons ini kembali tetapi
‫masih akan terus
‫menjalankan kode dalam fungsi ini.
‫Jadi setelah mengirim respons,
‫itu akan tetap menekan fungsi berikutnya dan
‫akan pindah ke middleware berikutnya dan
‫kemudian akan mengirim respons lain ke klien.
‫Tapi itu benar-benar tidak diperbolehkan,
‫jadi ingatlah bahwa kami benar-benar mengalami kesalahan ini sebelumnya, di
‫mana ia memberi tahu kami bahwa
‫kami tidak diizinkan mengirim header setelah respons telah dikirim.
‫Dan itulah jenis
‫kesalahan yang akan kami alami jika
‫kami tidak memiliki pernyataan pengembalian ini, oke.
‫Jadi sekali lagi, pastikan bahwa setelah mengirim respons ini,
‫fungsinya akan kembali sehingga akan selesai
‫dan tidak akan pernah memanggil ini lagi.
‫Jadi jangan pernah lupakan itu, tapi
‫tentu saja kita akan
‫melakukan ini berkali-kali sepanjang sisa
‫kursus sehingga Anda akan terbiasa dengan pola seperti ini.
‫Jadi mari kita lanjutkan dan hapus kode berulang ini dari
‫semua fungsi lainnya jadi
‫di sini kita memilikinya lagi, dan ya.
‫Saya juga ingin kode ini di sini
‫hanya untuk memastikan bahwa fungsi
‫tersebut benar-benar berjalan, dan oke, jadi sekarang kita dapat menyingkirkan ini
‫di sini dan menggantinya dengan fungsi pengontrol yang baru dibuat.
‫Jadi tourController,
‫checkID, jadi mari kita
‫periksa sekarang, dan sekali lagi, hanya untuk memastikan
‫bahwa itu tidak berjalan
‫di mana kita tidak memiliki id, jadi kita tidak memiliki log
‫di sini, jadi semuanya masih bekerja di sisi itu.
‫Dan sekarang dapatkan tur dengan id biasa,
‫jadi id yang valid, dan mari kita lihat.
‫Nah, kami mendapatkan id Tour adalah log,
‫dan itu berarti jika
‫itu benar-benar menjalankan middleware checkID kami, bukan?
‫Dan jika sekarang kami mencoba id
‫yang tidak valid, maka kami mendapatkan pesan ID
‫Tidak Valid kami, kode kesalahan 404, dan tentu saja id tur kami.
‫Mari kita lakukan hal yang sama dengan tambalan,
‫kita sudah memiliki ID yang
‫tidak valid di sini dan begitu juga dengan yang ini.
‫Jadi, sempurna, kan?
‫Jadi kami tidak lagi memiliki kode checkID di penangan
‫pembaruan yang baru saja kami panggil pada dasarnya, tetapi ID
‫kami tetap diperiksa karena kami
‫memiliki middleware itu, jadi ini di sini.
‫Kami memiliki middleware itu
‫di tumpukan sebelum benar-benar menyentuh pembaruan tourController.
‫Jadi middleware ini sekarang menjadi bagian dari saluran kami
‫seperti yang dapat Anda bayangkan, sekarang Anda
‫mungkin berpendapat bahwa kami mungkin hanya
‫membuat fungsi sederhana yang juga
‫dapat memeriksa ID dan saya memanggil fungsi
‫itu di dalam masing-masing fungsi tur ini, dan kemudian memanggil
‫itu di dalam masing-masing pengontrol tur yang relevan ini; tapi
‫itu benar-benar bertentangan
‫dengan filosofi express, di mana kita harus selalu bekerja
‫dengan middleware stack, jadi dengan pipeline ini
‫sebanyak yang kita bisa, oke, dan fungsi-fungsi ini di sini, mereka
‫tidak perlu khawatir sama sekali tentang validasi.
‫Masing-masing fungsi ini hanya memiliki satu tujuan yaitu untuk
‫melakukan apa yang mereka katakan,
‫jadi yang ini hanya
‫mendapatkan tur, yang ini hanya membuat tur, yang ini hanya
‫memperbarui, dan yang ini hanya menghapus, tidak memeriksa,
‫tidak tidak perlu khawatir tentang semua itu.
‫Dan jika sekarang kita akan
‫menambahkan pengontrol lain di sini juga tergantung pada id, maka
‫itu akan secara otomatis juga memeriksa apakah id
‫tidak valid tanpa kita harus melakukan langkah tambahan apa pun.
‫Jadi ini secara otomatis akan memeriksa id
‫dan itu sangat berguna dan juga cara
‫kerja aplikasi ekspres, bagus.
‫Jadi kami memiliki alat lain di kotak alat ekspres kami yang
‫sekarang dapat kami gunakan untuk menulis aplikasi ekspres kami.