‫Instruktur: Baiklah!
‫Dan sekarang untuk menyelesaikan bagian
‫ini, mari pelajari cara menangkap pengecualian yang tidak tertangkap.
‫Tapi apa sebenarnya pengecualian yang tidak tertangkap?
‫Nah, semua kesalahan, atau sebut saja bug, yang terjadi
‫pada kode sinkron kita
‫tetapi tidak ditangani di mana pun disebut pengecualian yang tidak tertangkap.
‫Dan seperti sebelumnya, sama seperti penolakan yang tidak tertangani, kami juga
‫memiliki cara untuk menangani pengecualian yang tidak tertangkap.
‫Jadi izinkan saya dengan cepat menunjukkan
‫kepada Anda contoh pengecualian yang tidak tertangkap.
‫Jadi mari kita berpura-pura bahwa kita sedang
‫mencoba menghibur. mencatat sesuatu yang tidak ada.
‫Dan segera, kami mendapatkan kesalahan ini di sini, x tidak ditentukan, dan
‫kemudian secara default, kami mendapatkan seluruh jejak tumpukan ini di
‫sini dicetak ke konsol.
‫Baiklah.
‫Dan sekarang, untuk memperbaikinya, ini sangat mirip dengan melakukan penolakan
‫yang tidak tertangani.
‫Jadi sekali lagi, kami mendengarkan sebuah acara,
‫kali ini disebut uncaughtException.
‫Dan tentu saja harus dalam tanda kutip.
‫Dan kemudian seperti sebelumnya, kami meneruskan fungsi panggilan balik kami.
‫Oke.
‫Dan sekarang sebenarnya apa yang kami lakukan di sini sangat mirip dengan
‫apa yang kami lakukan di sini.
‫Jadi kami ingin mengunci kesalahan
‫ke konsol sehingga kemudian muncul di log di server kami, oke?
‫Jadi, beri kami cara untuk kemudian memperbaiki masalah.
‫Dan kemudian kami ingin mematikan server dengan anggun.
‫Jadi mari, nah sebenarnya di
‫sini saya ingin mencetak seluruh kesalahan ke
‫konsol, dan bukan hanya pesannya, oke?
‫Dan mari kita juga mengubah urutannya di
‫sini, tetapi hanya itu.
‫Jadi sisanya sama.
‫Dan
‫ini tentu saja PENGECUALIAN TANPA PERCAYA!
‫Sekarang saya bisa refactor ini di sini menjadi fungsi
‫yang bagus, tapi biarkan saja seperti ini, oke?
‫Oke, jadi sekarang mari kita jalankan kembali ini.
‫Jadi mari kita lihat apa yang kita miliki di sini.
‫Dan memang, kita sekarang melihat PENGECUALIAN TANPA PERCAYA!
‫Mematikan.
‫Baiklah?
‫Dan sebenarnya ini kembali mencetak seluruh tumpukan ke
‫konsol, tetapi saya tidak benar-benar menginginkannya.
‫Saya tidak suka itu.
‫Jadi mari kita kembali ke apa yang kita miliki di sini.
‫Jadi salah. nama dan kemudian err. pesan.
‫Oke, jadi sekarang
‫kita memiliki ReferenceError bahwa x tidak didefinisikan, oke?
‫Dan mari kita menempatkan hal yang sama di sini.
‫Jadi seperti dulu.
‫Baiklah.
‫Dan itu sebenarnya semua
‫yang ada untuk menangkap pengecualian yang tidak tertangkap.
‫Sekarang sementara di sini dalam penolakan yang tidak
‫tertangani, menerjang aplikasi seperti yang kami lakukan di
‫sini adalah opsional, ketika ada pengecualian
‫yang tidak tertangkap, kami benar-benar perlu untuk membuat crash aplikasi
‫kami karena setelah ada pengecualian yang tidak tertangkap,
‫seluruh proses node
‫dalam keadaan - Disebut negara najis, oke?
‫Jadi untuk memperbaikinya, proses harus dihentikan dan
‫kemudian dimulai ulang, oke?
‫Dan lagi,
‫dalam produksi, kita harus memiliki
‫alat yang akan memulai ulang aplikasi setelah mogok.
‫Dan banyak layanan hosting sudah melakukannya di
‫luar kotak, oke?
‫Jadi, sepenuhnya otomatis tanpa kita
‫harus melakukan apapun.
‫Sekarang, di Node. js, bukanlah praktik
‫yang baik untuk hanya mengandalkan kedua penangan kesalahan yang baru
‫saja kita terapkan di sini, oke?
‫Jadi idealnya kesalahan harus benar-benar ditangani
‫tepat di tempat terjadinya.
‫Jadi misalnya, dalam masalah koneksi ke database, tentu saja kita harus
‫menambahkan catch handler di sana dan
‫tidak hanya mengandalkan callback
‫penolakan yang tidak tertangani yang kita miliki di sini, oke?
‫Dan beberapa orang bahkan mengatakan bahwa kita tidak boleh menggunakan ini sama sekali, tetapi saya
‫tidak setuju dengan itu.
‫Saya pikir sebagai jaring pengaman, katakanlah,
‫mereka bisa sangat berguna dan berperan dalam aplikasi kita.
‫Sekarang sebenarnya handler ini
‫harus berada di bagian paling atas dari kode kita, oke?
‫Atau setidaknya sebelum kode lain benar-benar dieksekusi.
‫Karena perhatikan apa yang terjadi jika saya memindahkan baris kode ini ke
‫sini sebelum handler ini.
‫Jadi jika saya meletakkannya di sini,
‫misalnya, dan kemudian menyimpannya, maka
‫Anda benar-benar melihat
‫bahwa pawang kami tidak menangkap pengecualian ini, jadi kesalahan ini di sini, bukan?
‫Dan itu karena hanya di sini
‫di akhir kita benar-benar mulai mendengarkan pengecualian yang tidak tertangkap.
‫Tetapi dalam kasus ini di sini, pengecualian yang
‫tidak tertangkap terjadi bahkan sebelum kita mendengarkan acara itu.
‫Dan karena itu, kita tidak punya cara untuk menangkapnya, bukan?
‫Jadi idealnya kita harus meletakkannya di sini, tepat di atas, sekali
‫lagi sebelum kode lain dijalankan.
‫Terutama yang ada di aplikasi kita.
‫Jadi mari kita meletakkannya benar-benar di sini.
‫Sekarang masalahnya di sini
‫adalah bahwa server tidak ditentukan pada saat ini.
‫Tapi itu tidak
‫masalah, karena sebenarnya kita tidak membutuhkan
‫server di sini sama sekali, oke?
‫Dan itu karena kesalahan
‫ini, jadi pengecualian yang tidak tertangkap
‫ini, mereka tidak akan terjadi secara tidak sinkron.
‫Jadi mereka tidak akan
‫ada hubungannya dengan server sebenarnya.
‫Jadi kita tidak membutuhkan ini di sini sama sekali.
‫Kami hanya dapat menyimpannya di
‫sini, dan sekarang kami memilikinya sebelum kami benar-benar membutuhkan
‫aplikasi utama kami.
‫Jadi jika kita sekarang memiliki kesalahan,
‫mari kita coba dulu di sini,
‫jadi Anda melihat bahwa
‫sekarang kita kembali untuk benar-benar menangkapnya di penangan kesalahan kita.
‫Tetapi jika kita sekarang memiliki kode ini, misalnya di dalam app. js, katakanlah, itu tidak terlalu
‫penting, katakan saja itu ada di sini, dan
‫jika kita sekarang
‫menjalankan ini, maka Anda melihat bahwa
‫kita masih menangkap pengecualian itu
‫di penangan kesalahan kita, yang sebelumnya tidak akan terjadi.
‫Baiklah?
‫Dan sekarang hanya untuk
‫percobaan, bagaimana menurut Anda jika kita meletakkan kode
‫ini di sini di fungsi middleware ini?
‫Menurutmu apa yang akan terjadi
‫jika kita menyimpan file ini sekarang?
‫Jadi x masih belum didefinisikan di mana pun, tetapi mari
‫kita lihat apa yang terjadi saat
‫kita menjalankan kode ini.
‫Dan sekarang kita sebenarnya tidak memiliki kesalahan.
‫Atau sebenarnya kami melakukannya,
‫tetapi itu hanya karena penolakan kami yang tidak tertangani,
‫yang disebabkan oleh fakta bahwa kata
‫sandi kami di sini masih salah.
‫Jadi jika kami menyimpannya dan sekarang menyimpannya lagi, Anda
‫seharusnya tidak melihat kesalahan sama sekali.
‫Dan memang, kita tidak.
‫Dan mengapa begitu?
‫Nah, karena fungsi middleware di sini
‫tentu baru
‫dipanggil begitu ada permintaan, kan?
‫Jadi mari kita lihat apa yang terjadi saat kita melakukan permintaan.
‫Jadi mari kita lakukan permintaan Dapatkan Semua Tur.
‫Dan mari kita tunggu.
‫Dan, di sini kita mendapatkan pesan "Ada yang salah! " pesan
‫kesalahan dengan 500, dan itu
‫juga karena kami masih
‫dalam mode produksi, oke?
‫Tapi bagaimanapun, mendapatkan pesan ini di sini, ingat,
‫berarti kita memiliki kesalahan nonoperasional di sini.
‫Jadi pada dasarnya kesalahan itu tidak kita buat sendiri.
‫Jadi, benar ini, kita sekarang masuk ke
‫sini di errorController kita, kita langsung ke sini, kan?
‫Jadi ke cabang lain ini di sini di fungsi sendErrorProd.
‫Dan sebenarnya Anda juga
‫melihat kesalahan di sini di konsol, oke?
‫Dan itulah yang terjadi ketika
‫ada kesalahan di dalam middleware Express apa pun, bukan?
‫Jadi Express, ketika ada kesalahan,
‫secara otomatis akan masuk ke middleware penanganan kesalahan
‫dengan kesalahan itu, oke?
‫Dan itulah mengapa ketika
‫kita mendapatkan kesalahan di sini di salah
‫satu fungsi middleware kita, itu akan segera masuk ke sini ke handler ini, oke?
‫Dan karena
‫kita dalam produksi, itu akan memasuki
‫blok ini di sini, tetapi karena
‫itu bukan CastError, dan bukan kesalahan ini, dan
‫bukan ValidationError, maka segera setelah kesalahan benar-benar dikirim, di
‫sini, kami kemudian masuk ke blok ini .
‫Dan sekali lagi, itulah mengapa kami mengirimkan kesalahan umum ini, oke?
‫Sekarang mari kita benar-benar keluar dari mode
‫ini di sini dan kembali ke awal npm normal kita.
‫Jadi sekarang, kesalahan kita akan dikirim seperti ini, kan?
‫Jadi kirim kesalahan pengembangan akan memberi kami semua
‫detail tentang kesalahan yang terjadi.
‫Dan sekarang memang kita mendapatkan ReferenceError: x is not didefinisikan.
‫Oke?
‫Jadi di aplikasi. js, baris 21.
‫Jadi, baris 21 adalah tempatnya, tapi mari kita
‫singkirkan itu.
‫Aku hanya ingin menunjukkannya padamu.
‫Oke?
‫Bagaimanapun, dengan ini, kami sebenarnya menutup
‫bagian penanganan kesalahan kami.
‫Dan mungkin ada seluruh kursus tentang penanganan kesalahan
‫dengan Node dan Express, karena ini benar-benar
‫topik yang sangat kompleks.
‫Namun, di bagian ini, Anda mempelajari hal-hal penting
‫yang perlu Anda ketahui untuk benar-benar mulai
‫membuat aplikasi yang luar biasa.