Di dalam node.js readFile () menunjukkan cara menangkap kesalahan, namun tidak ada komentar untuk fungsi readFileSync () terkait penanganan kesalahan. Karena itu, jika saya mencoba menggunakan readFileSync () ketika tidak ada file, saya mendapatkan kesalahan Error: ENOENT, no such file or directory
.
Bagaimana cara menangkap pengecualian yang dilemparkan? Doco tidak menyatakan pengecualian apa yang dilemparkan, jadi saya tidak tahu pengecualian apa yang perlu saya tangkap. Saya harus mencatat bahwa saya tidak suka gaya umum coba / tangkap pernyataan try / catch. Dalam hal ini saya ingin menangkap pengecualian spesifik yang terjadi ketika file tidak ada dan saya berusaha melakukan readFileSync.
Harap perhatikan bahwa saya hanya menjalankan fungsi sinkronisasi saat memulai sebelum melakukan upaya koneksi, jadi komentar yang tidak seharusnya saya gunakan fungsi sinkronisasi tidak diperlukan :-)
sumber
fs.existsSync()
sebagaimana dapat dilihat dalam jawaban baru sayaJawaban:
Pada dasarnya,
fs.readFileSync
melempar kesalahan saat file tidak ditemukan. Kesalahan ini berasal dariError
prototipe dan dibuang menggunakanthrow
, maka satu-satunya cara untuk menangkapnya adalah dengan sebuahtry / catch
blok:Sayangnya Anda tidak dapat mendeteksi kesalahan yang telah dilemparkan hanya dengan melihat rantai prototipenya:
adalah yang terbaik yang dapat Anda lakukan, dan ini akan berlaku untuk sebagian besar (jika tidak semua) kesalahan. Karena itu saya sarankan Anda pergi dengan
code
properti dan memeriksa nilainya:Dengan cara ini, Anda hanya berurusan dengan kesalahan khusus ini dan melemparkan kembali semua kesalahan lainnya.
Atau, Anda juga dapat mengakses
message
properti kesalahan untuk memverifikasi pesan kesalahan rinci, yang dalam hal ini adalah:Semoga ini membantu.
sumber
EACCES
Kode juga harus diperiksa dalam pernyataan if untuk kasus ketika file ada tetapi tidak dapat dibaca karena kurangnya izinSaya lebih suka cara penanganan ini. Anda dapat memeriksa apakah file ada secara sinkron:
sumber
files
dengan semua yang telah saya pelajari untuk membuat async dan mencoba / menangkap dengan lebih mudah.Anda harus menangkap kesalahan dan kemudian memeriksa jenis kesalahan itu.
sumber
Saya menggunakan lambda yang langsung dipanggil untuk skenario ini:
async
Versi: kapan:sumber
fs
adalah modul Nodefs.readFileAsync()
sekarangfs.readFile()
dan juga tidak boleh meletakkan fungsi async di dalam try / catch di node.js. coba / tangkap tidak akan pernah mendapatkan kesalahan karena async. alih-alih meneruskan kesalahan dalam panggilan balik dan menanganinya di sana:fs.readFile('/etc/passwd', (err, data) => { if (err) throw err; console.log(data); });
dari: nodejs.org/dist/latest-v12.x/docs/api/…Coba gunakan Async sebagai gantinya untuk menghindari memblokir satu-satunya utas yang Anda miliki dengan NodeJS. Lihat contoh ini:
Nanti dapat menggunakan fungsi async ini dengan mencoba / menangkap dari fungsi lain:
Selamat Coding!
sumber
JavaScript try… catch mekanisme tidak dapat digunakan untuk mencegat kesalahan yang dihasilkan oleh asynchronous API. Kesalahan umum untuk pemula adalah mencoba menggunakan lemparan di dalam panggilan balik kesalahan-pertama:
Ini tidak akan berfungsi karena fungsi panggilan balik yang dilewatkan ke fs.readFile () dipanggil secara tidak sinkron. Pada saat callback dipanggil, kode di sekitarnya, termasuk blok try ... catch, sudah keluar. Melempar kesalahan di dalam callback dapat merusak proses Node.js dalam banyak kasus. Jika domain diaktifkan, atau handler telah terdaftar dengan process.on ('uncaughtException'), kesalahan tersebut dapat dicegat.
referensi: https://nodejs.org/api/errors.html
sumber