‫-: Jadi seperti yang saya
‫sebutkan di video terakhir ada tiga jenis
‫kesalahan yang mungkin dibuat oleh Mongoose
‫di mana kita perlu menandainya sebagai kesalahan operasional
‫sehingga kami dapat mengirim kembali pesan kesalahan yang berarti
‫kepada klien dalam produksi.
‫Dan sekarang mari kita mulai dengan mensimulasikan ketiga kesalahan ini, oke?
‫Jadi yang pertama adalah ketika kami mencoba ID yang tidak
‫valid di sini, jadi
‫hanya seperti ini, dan Mongoose tidak akan
‫dapat mengubahnya menjadi ID MongoDB, ingat itu.
‫Dan inilah kesalahan yang kami dapatkan sekarang, dan sebenarnya, di
‫sini Anda dapat melihat semua jenis hal
‫yang kami definisikan yang ingin kami lihat dalam produksi.
‫Jadi seluruh objek kesalahan, lalu pesan kesalahan,
‫dan juga tumpukan lengkap, oke?
‫Jadi ini adalah contoh sempurna dari
‫kesalahan operasional.
‫Jadi ini adalah sesuatu yang sangat mungkin
‫terjadi, jadi kami perlu mengirim kembali tanggapan yang
‫berarti untuk menangani kesalahan ini.
‫Dan ini adalah contoh sempurna dari kesalahan
‫operasional yang sangat mungkin terjadi pada klien, jadi, kita
‫perlu menanganinya sebagai satu, oke?
‫Jadi, pada dasarnya dengan mengirimkan pesan kesalahan
‫yang bagus alih-alih sesuatu seperti
‫ini, yang tidak berarti apa-apa bagi klien mana pun, bukan?
‫Oke, jadi tujuannya lagi di
‫sini adalah untuk menandai kesalahan ini sebagai operasional,
‫dan membuat pesan yang bermakna, oke?
‫Tapi sebelum kita bisa
‫melakukannya, mari kita lihat dua kesalahan
‫Mongoose lainnya yang juga harus kita tandai sebagai operasional, oke?
‫Jadi, mari Buat Tur
‫Baru, dan yang akan saya lakukan adalah membuat nama duplikat.
‫Jadi, mari kita salin yang ini di sini.
‫Dan saya pikir semua nilai di
‫sini benar, jadi mari kita coba sekarang.
‫Dan memang disini kita mendapatkan error yang sudah kita
‫ketahui yaitu duplikat
‫key error karena kita sudah
‫memiliki tour, atau dokumen dengan nama Forest Hiker, oke?
‫Jadi sekali lagi, ini adalah kesalahan
‫yang akan terjadi di beberapa titik,
‫dan sekali lagi,
‫itu tidak memiliki pesan kesalahan yang sangat berarti, bukan?
‫Dan sekali lagi, kita perlu mengubahnya.
‫Kemudian yang ketiga juga tentang validasi,
‫jadi mari kita lakukan di sini di Update Tour.
‫Jadi, katakanlah kita ingin memiliki peringkat Rata-rata enam, yang
‫kita tahu tidak valid, bukan?
‫Karena kami mengatakan bahwa maksimal peringkat Rata-rata
‫bisa menjadi lima.
‫Jadi mari kita
‫lihat, dan memang, kita mendapatkan ValidationError ini, bukan?
‫Jadi ini disebut ValidationError,
‫dan memiliki objek error ini dengan semua errornya.
‫Mari kita benar-benar menempatkan satu lagi di sini.
‫Jadi katakanlah kesulitan,
‫dan kemudian sesuatu yang lain,
‫jadi yang tidak mudah, sedang, atau sulit,
‫dan sekarang kita mendapatkan dua objek ini di sini.
‫Satu untuk peringkat, dan satu untuk kesulitan, oke?
‫Jadi ini adalah
‫tiga kesalahan yang akan
‫kita tandai sebagai operasional, dimulai dengan
‫yang pertama, jadi pada dasarnya, tipe CastError, oke?
‫Jadi, mari kita kembali ke sini, dan kita
‫akan melakukannya lagi di sini, karena kita hanya ingin melakukan ini dalam produksi, oke?
‫Dalam pengembangan, kami tidak peduli dengan semua ini.
‫Yang ingin kami lakukan hanyalah
‫melihat kesalahan kami sehingga pada dasarnya kami
‫dapat memperbaikinya, tetapi dalam produksi, di sinilah
‫kami ingin mengirim pesan kesalahan yang berarti kepada klien.
‫Jadi, katakanlah jika err. name sama
‫dengan CastError, jadi begitulah cara kita mengidentifikasi jenis
‫kesalahan ini di sini
‫yang baru saja kita
‫bicarakan, karena memiliki nama CastError, oke?
‫Jadi jika salah. namanya CastError,
‫maka kita akan memanggil fungsi khusus yang akan kita
‫buat dalam satu
‫detik, yang disebut handleCastError.
‫Dan kemudian saya juga akan mengatakan di sini DB
‫untuk database, sehingga kita tahu bahwa ini terkait dengan database kita, oke?
‫Dan beginilah cara kerjanya.
‫Kami akan meneruskan
‫kesalahan yang dibuat Mongoose ke dalam
‫fungsi ini, jadi seperti ini, dan ini
‫kemudian akan mengembalikan kesalahan baru yang dibuat tanpa kelas AppError, oke?
‫Dan kesalahan itu kemudian akan ditandai sebagai operasional,
‫karena ingat, semua AppErrors kami
‫memiliki properti operasional yang
‫disetel ke dua secara otomatis, bukan?
‫Jadi ini akan mengembalikan kesalahan, jadi, mari kita simpan itu, oke?
‫Dan begitu juga menyimpannya di err.
‫Sekarang sama sekali bukan
‫praktik yang baik untuk mengesampingkan argumen suatu fungsi, oke?
‫Jadi kesalahan berasal dari fungsi err tengah ini, bukan?
‫Jadi, dari sini, dan alih-alih melakukan itu,
‫saya sebenarnya akan membuat
‫salinan keras dari objek kesalahan itu, oke?
‫Jadi let, dan saya menggunakan let, dan bukan const, karena
‫tentu saja kita akan
‫menetapkan kembali kesalahan baru, nanti di sini.
‫Jadi, sebut saja kesalahan ini, bukan hanya
‫err, yang merupakan nama normal dari kesalahan di Express.
‫Dan sekali lagi, kita akan menggunakan
‫trik kita di mana kita menggunakan destructuring dari kesalahan aslinya, oke?
‫Jadi, mulai sekarang, kita akan menggunakan kesalahan ini alih-alih err.
‫Jadi di sini, dan di sini, dan di sini.
‫Baik?
‫Jadi, sekarang mari kita lanjutkan
‫dan benar-benar membuat fungsi ini di sini.
‫Jadi mari kita taruh di sini di awal.
‫Baik.
‫Coba ingat bahwa ini menerima kesalahan,
‫dan sekarang saya akan kembali hanya menyebutnya err seperti ini,
‫karena sekali lagi itu semacam standar di Express.
‫Dan untuk memulai,
‫mari kita lihat kembali objek error di sini, oke?
‫Jadi di sini, kita punya jalannya, dan kita juga punya nilainya, oke?
‫Jadi jalur di sini pada dasarnya
‫adalah nama bidang yang data inputnya salah format, oke?
‫Dan nilai itu di sini kemudian yang ini,
‫yang tentu saja, yang kita lakukan di masa lalu, oke?
‫Jadi, ini mungkin tidak hanya terjadi pada ID, tetapi sebenarnya,
‫untuk bidang apa pun yang kami
‫kueri dengan nilai dalam format yang salah, oke?
‫Jadi, sekarang mari kita
‫buat string yang mengatakan bahwa kita
‫memiliki ID yang tidak valid dengan nilai yang ini dalam kasus ini, oke?
‫Jadi, itu jalur dan nilainya, oke?
‫Jadi, mari kita buat pesan di sini, dan
‫katakan Invalid err. jalannya salah.
‫nilai.
‫Oke?
‫Jadi sekarang, kita cukup mengembalikan AppError kita sendiri.
‫Oke?
‫Jadi seperti yang saya sebutkan beberapa kali sekarang, oke?
‫Jadi AppError, dan saya benar-benar harus memasukkannya di
‫sini, atau meminta, karena saya belum melakukannya.
‫Jadi const AppError sama dengan memerlukan, dan
‫naik satu tingkat, lalu ke folder
‫utilitas, dan kemudian appError.
‫Ini dia.
‫Jadi sekarang, ke dalam atau AppError, kami meneruskan pesan kami, dan
‫kode status 400, yang merupakan singkatan dari Permintaan Buruk.
‫Oke, jadi seperti ini, kami mengubah
‫kesalahan aneh yang kami dapatkan
‫dari Mongoose menjadi kesalahan
‫operasional dengan pesan
‫ramah yang bagus yang (tertawa) dapat
‫dibaca
‫oleh manusia yang sebenarnya, oke?
‫Oke, satu hal terakhir yang perlu
‫kita ubah di sini adalah juga mengatur yang ini di sini ke kesalahan, oke?
‫Jadi, sekarang, jika kesalahan kita adalah CastError, maka
‫kita akan meneruskan kesalahan ke fungsi ini
‫yang akan mengembalikan AppError kita, jadi yang
‫ini, dan itu yang kemudian akan dikirim ke
‫klien menggunakan sendErrorProd kami, baik?
‫Jadi, sekarang mari kita benar-benar mencobanya.
‫Jadi di sini, dalam paket kami. json,
‫kami memiliki skrip start:prod ini, jadi mari kita coba.
‫Jadi, npm run start:prod, dan saya sebenarnya dapat melengkapi nama skrip npm
‫ini secara otomatis menggunakan tab di sini di terminal, oke?
‫Jadi, ini akan memulai
‫proses dalam mode produksi, pada dasarnya, oke?
‫Jadi, sekarang mari kita coba ini lagi.
‫Jadi, jika Anda sekarang melakukan
‫permintaan ini, kami akan mendapatkan kembali pesan
‫kesalahan yang baru saja kami buat, karena saat ini, kami sedang dalam produksi.
‫Dan memang, ini dia.
‫Jadi kami memiliki valid, dan kemudian nama bidang,
‫atau sebenarnya nama jalur, dan kemudian nilai yang
‫kami masukkan.
‫Jadi jika kami mencoba sesuatu
‫yang berbeda, maka tentu saja, kami mendapatkan
‫ini, dan tentu saja, juga kode 400 Permintaan Buruk kami.
‫Oke, bagus.
‫Jadi, yang ini sekarang ditangani.
‫Di kuliah berikutnya, kita akan mengurus yang berikutnya,
‫yaitu untuk duplikat nama bidang, oke?
‫Jadi, sampai jumpa lagi.