‫Instruktur: Sekarang mari kita
‫lebih banyak menggunakan bisnis kelas
‫AppError kita dengan menambahkan beberapa kesalahan 404
‫dan beberapa fungsi pengendali tur kita.
‫Sekarang hanya satu hal yang
‫ingin saya katakan sebelum kita benar-benar menerapkan kesalahan
‫404 ini adalah tentu saja kita bisa menggunakan fungsi
‫catchAsync juga di router kita, oke?
‫Jadi, izinkan saya menunjukkan kepada Anda bagaimana itu akan berhasil.
‫Jadi, di TourRoutes,
‫saya bisa membungkus fungsi
‫ini di sini ke catchAsync seperti
‫ini daripada melakukannya di sini di controller.
‫Jadi, di sini di mana saya melakukannya sebenarnya, kan?
‫Dan itu akan memiliki hasil yang sama persis
‫tetapi saya tidak
‫melakukannya dengan cara ini karena seperti
‫ini, saya harus ingat yang
‫mana dari metode ini di
‫sini yang sebenarnya merupakan metode sinkronisasi, oke,
‫sehingga hanya pada metode yang saya tambahkan fungsi catchAsync , Baik?
‫Sekarang dalam kasus ini, sebenarnya semuanya adalah fungsi async
‫dan jadi, bukan itu masalahnya di sini dalam contoh ini
‫tetapi akan ada beberapa contoh
‫nanti di mana tidak semua penangan adalah fungsi asinkron dan,
‫dalam hal
‫ini, saya akan benar-benar memilikinya
‫untuk mengingat mana dari mereka yang harus saya
‫bungkus ke catchAsync
‫dan mana yang tidak dan
‫sebagainya, dalam melakukannya di controller jauh lebih mudah karena hanya
‫setiap kali saya menulis
‫fungsi async di sini, mereka
‫sudah tahu betul, saya perlu membungkus ke catchAsync.
‫Oke.
‫Jadi, saya tidak melakukannya
‫di sini, saya hanya melakukannya seperti yang saya tunjukkan di video terakhir.
‫Oke dan sebenarnya saya pernah mengalami bug yang sangat
‫sulit ditemukan karena
‫saya sebenarnya membungkus fungsi yang
‫tidak async ke catchAsync dan sehingga kami
‫benar-benar tidak berfungsi dan saya
‫tidak tahu di mana bug itu dan
‫membuang banyak waktu yang satu itu.
‫Jadi, sejak itu, saya tidak lagi meletakkan catchAsync di sini tetapi
‫sangat dekat dengan tempat saya benar-benar
‫membutuhkannya, sangat dekat dengan kode yang sebenarnya tidak sinkron.
‫Oke dan dengan itu,
‫sekarang mari kita terapkan beberapa kesalahan 404 di sini.
‫Baiklah, jadi saya ingin
‫mulai dengan menunjukkan lagi contoh
‫yang kami lakukan di video terakhir.
‫Oke, jadi kami mencoba untuk mendapatkan
‫tur untuk ID aneh ini yang sebenarnya tidak ada
‫dan kesalahan
‫yang kami dapatkan adalah bahwa pada
‫dasarnya Mongoose tidak dapat mengubah string ini
‫di sini menjadi ID yang valid untuk MongoDB.
‫Tetapi apa yang terjadi ketika kita benar-benar menggunakan ID MongoDB yang valid?
‫Jadi, misalnya, mari, ya, mari kita salin yang ini
‫di sini,
‫oke, dan yang ini tentu akan ada hasilnya
‫dan jadi, mari kita ubah sedikit, jadi misalnya, mengubah
‫ini menjadi nol di sini akan
‫tetap menjadi ID yang valid ,
‫jadi tampilannya seperti ini
‫dan tampilannya sama persis seperti sebelumnya,
‫saya hanya mengubah
‫satu nomor tetapi ID ini mungkin tidak akan ada.
‫Jadi, mari kita lihat apa yang kita dapatkan.
‫Dan memang, sekarang hasil kami di sini adalah nol.
‫Baiklah, jadi, sebenarnya bukan itu yang kita inginkan, bukan?
‫Yang kami inginkan di sini adalah menunjukkan kode status 404 di sini
‫dan mengatakan bahwa tur ini tidak ditemukan.
‫Oke dan sekarang, mari kita gunakan kelas
‫orAppError untuk mengimplementasikannya.
‫Perlu diingat bahwa tur
‫yang kita dapatkan kembali ke sini adalah nol, oke?
‫Jadi, null yang sekarang dapat kita uji.
‫Jadi, jika kita pergi ke handler getTour kita,
‫sekarang mari kita implementasikan jika tidak ada tur dan dalam hal ini kita akan membuat
‫atau kesalahan dan ini di sini berfungsi
‫karena jika
‫tidak ada tur, itu
‫akan menjadi nol.
‫Ingat dan dalam JavaScript, null adalah nilai fallacy, jadi nilai
‫yang akan dikonversi menjadi false di sini
‫dalam pernyataan if.
‫Oke, dan begitu, jika tidak ada
‫tur, maka tur
‫itu salah dan tidak salah tentu saja
‫benar dan begitu, begitulah cara kita memasukkan blok if ini.
‫Jadi, apa yang ingin kita lakukan jika tidak ada tur?
‫Nah, kita ingin membuat next dengan error.
‫Jadi, untuk melompat langsung ke atau kesalahan dan
‫middleware terkait.
‫Jadi, kami membuat AppError baru yang
‫belum tersedia, kami masih harus
‫mengimpornya tetapi segera gunakan di sini.
‫Oke, dan katakan
‫saja Tidak ada tur yang ditemukan dengan ID itu.
‫Dan kemudian kode
‫status ingat adalah argumen kedua adalah 404, oke?
‫Sekarang satu hal terakhir yang perlu kita
‫lakukan di sini yaitu mengatakan kembali, oke karena
‫kita ingin segera mengembalikan fungsi ini dan tidak
‫melanjutkan ke baris berikutnya yang akan menjadi
‫ini dan yang
‫kemudian pada dasarnya akan mencoba mengirim dua tanggapan dan kita pernah
‫mengalami kesalahan itu sebelumnya, jadi saya
‫harap Anda akan mengingatnya
‫dan itulah alasan mengapa kami selalu perlu kembali ke sini.
‫Oke, sekarang mari kita lanjutkan dan cepat mengimpor appError dan itu
‫mirip dengan yang ini di sini,
‫jadi mari kita duplikat.
‫Oke, dan ini dia dengan huruf kapital A.
‫Baiklah, selamat mencoba dan
‫sekarang coba lagi
‫dan sekarang memang tidak ditemukan tur dengan ID 404 itu.
‫Sempurna, jadi persis seperti yang kami inginkan.
‫Oh dan Anda juga melihat bahwa kami gagal di sini.
‫Oke dan itu berasal dari atau kelas juga.
‫Bagus, jadi itu berhasil dan saya sangat
‫berharap sekarang Anda mengerti persis bagaimana semua penanganan
‫kesalahan ini sekarang bekerja.
‫Oke, jadi sekali lagi kami membuat kesalahan dan
‫kami kemudian meneruskan kesalahan itu ke
‫berikutnya dan segera setelah menerima sesuatu, itu
‫mengasumsikan bahwa itu adalah kesalahan
‫dan itu
‫akan langsung melompat ke middleware penanganan kesalahan global
‫yang kemudian akan mengirimkan respons untuk kami , baik?
‫Jadi, mari salin
‫yang ini dan letakkan di semua
‫penangan lain yang meminta dokumen berdasarkan ID.
‫Jadi, bukan buat tur tapi perbarui tur, oke?
‫Jadi, di
‫sini sama, jika kami mencoba memperbarui
‫tur yang tidak ada,
‫itu akan memberi kami kesalahan yang sama persis.
‫Akhirnya tentu saja sama dengan menghapus.
‫Dan sekarang Anda melihat bahwa ESLint memberi saya kesalahan ini di
‫sini dan begitu, itu karena tur ini tidak ditentukan
‫dan dalam hal ini, ESLint benar-benar menyelamatkan saya di
‫sini dari membuat bug ini.
‫Benar?
‫Jadi, sekali lagi tanpa ESLint, saya
‫mungkin hanya menempelkannya di sini
‫dan menyebutnya sehari
‫tanpa menyadari bahwa tur tidak ditentukan di mana pun
‫di dalam fungsi ini,
‫tetapi karena kami memasang alat yang sangat berharga ini,
‫sekarang saya dapat melanjutkan dan memperbaikinya.
‫Baiklah, jadi sampai
‫saat ini, kami hanya menunggu instruksi penghapusan ini di sini dan
‫tidak menyimpan hasilnya dan itu
‫hanya karena kami tidak membutuhkannya.
‫Oke, tapi saat ini kami benar-benar membutuhkannya
‫karena kami ingin variabel tur
‫ini untuk memverifikasi apakah memang ada tur atau tidak.
‫Jadi, sangat mudah, const tour dan kemudian
‫sama dengan hasil itu,
‫berikan save dan kemudian kesalahannya hilang.
‫Sangat bagus.
‫ESLint di tempat kerja, oke?
‫Sekarang mungkin Anda memperhatikan bahwa saya tidak menambahkan kesalahan 404 ini
‫di penangan getAllTour ini.
‫Jadi, mengapa saya melakukan itu?
‫Jadi izinkan saya menjelaskan alasannya.
‫Jadi, ketika tidak ada hasil yang ditemukan,
‫misalnya, tidak ada hasil yang cocok untuk filter, atau karena
‫halaman yang diminta
‫tidak ada, maka tentu saja kami dapat mempertimbangkan untuk
‫mengirimkan kesalahan 404 dan mengatakan bahwa
‫data tersebut tidak ada. ditemukan tetapi menurut
‫pendapat saya dan juga pendapat pengembang
‫lain, itu tidak sepenuhnya benar dalam permintaan ini
‫karena sebenarnya tidak ada kesalahan.
‫Maksudku, permintaan itu diterima dengan benar.
‫Basis data dengan benar mencari tur dan
‫menemukan persis nol catatan, jadi, nol
‫catatan ini persis seperti
‫yang akan kami kirim kembali bersama dengan 200 kode HTTP.
‫Baiklah, sekali lagi saya menganggap
‫bahwa tidak mungkin ada kesalahan ketika
‫pengguna meminta semua tur kecuali tentu
‫saja ada beberapa kegagalan dalam database atau sesuatu
‫seperti itu.
‫Tetapi dalam hal
‫ini, Mongoose akan secara otomatis membuat kesalahan.
‫Benar, yang kemudian akan ditangkap oleh fungsi atau catchAsync
‫kami dan seperti yang sudah
‫Anda ketahui, ditangani
‫di penangan kesalahan global kami dan seperti yang
‫sudah Anda
‫ketahui, ditangani di middleware penanganan kesalahan global kami.
‫Baiklah, jadi saya sudah mengucapkan kata-kata ini berkali-kali sekarang.
‫Bagaimanapun, saya harap itu
‫masuk akal dan, ya, mari kita lanjutkan.