ExpressJS error handling
Avvallari error handle qilishni bilmas edim va odatda:
- So'rov osilib qolardi, client javob olmasdi
- Ba'zan logga ham hech narsa ketmasdi
- Xatolik faqatgina bir joydan chiqsa ham butun servis nazoratdan chiqib ketardi.
Lekin keyinroq markaziy error handler yozish mumkinligini o'rganib chiqdim. Hamma error xabarlar bir joyga keladi va aynan shu yerdan qanday javob berish, qanday loglashni hal qilish mumkin
Buni tahminiy 3 ta qismga bo'lsak:
1. Custom error class — AppError
class AppError extends Error {
constructor(message, statusCode) {
super(message);
this.statusCode = statusCode;
this.isOperational = true; // kutilgan error
}
}
Bu nima beradi?
- Endi route ichida esa bunday yoziladi:
throw new AppError("User not found", 404);
throw new AppError("Invail email", 400);
- message — client ga ko'rsatiladigan xabar;
- statusCode — HTTP status (404, 400 va hkz);
- isOperational — bu default message uchun
Shunda logikadagi xatolarni AppError bilan muammosiz throw qilamiz, try/catch bilan har bir joyga if yozish chiqish o'rniga
Muhim qismlar:
- isOperational = true, demak client ga xabarni ochiq yozish mumkin
- Oddiy Error yoki kutilmagan xatolik yuzaga kelganda isOperational bo'lmaydi, demak 500 Internal server error va client ga umumiy xavfsiz xabar beriladi;
- Stack trace, to'liq xato tafsilotlari faqat log da bo'ladi. client ga chiqarilmaydi va bu xavfsiz
Qisqasi. AppError boshqarish mumkin bo'lgan va kutilgan error lar uchun. Bitta errorHandler middleware hamma error larni bir joyga jamlaydi. Client ga esa aniq va tushunarli xabar ko'rsatiladi. Kutilmagan error lar uchun umumiy Internal server error ko'rsatiladi.
#nodejs / #article / #learning
@creativecoder — but not creative coder))
Avvallari error handle qilishni bilmas edim va odatda:
- So'rov osilib qolardi, client javob olmasdi
- Ba'zan logga ham hech narsa ketmasdi
- Xatolik faqatgina bir joydan chiqsa ham butun servis nazoratdan chiqib ketardi.
Lekin keyinroq markaziy error handler yozish mumkinligini o'rganib chiqdim. Hamma error xabarlar bir joyga keladi va aynan shu yerdan qanday javob berish, qanday loglashni hal qilish mumkin
Buni tahminiy 3 ta qismga bo'lsak:
1. Custom error class — AppError
class AppError extends Error {
constructor(message, statusCode) {
super(message);
this.statusCode = statusCode;
this.isOperational = true; // kutilgan error
}
}
Bu nima beradi?
- Endi route ichida esa bunday yoziladi:
throw new AppError("User not found", 404);
throw new AppError("Invail email", 400);
- message — client ga ko'rsatiladigan xabar;
- statusCode — HTTP status (404, 400 va hkz);
- isOperational — bu default message uchun
Shunda logikadagi xatolarni AppError bilan muammosiz throw qilamiz, try/catch bilan har bir joyga if yozish chiqish o'rniga
Muhim qismlar:
- isOperational = true, demak client ga xabarni ochiq yozish mumkin
- Oddiy Error yoki kutilmagan xatolik yuzaga kelganda isOperational bo'lmaydi, demak 500 Internal server error va client ga umumiy xavfsiz xabar beriladi;
- Stack trace, to'liq xato tafsilotlari faqat log da bo'ladi. client ga chiqarilmaydi va bu xavfsiz
Qisqasi. AppError boshqarish mumkin bo'lgan va kutilgan error lar uchun. Bitta errorHandler middleware hamma error larni bir joyga jamlaydi. Client ga esa aniq va tushunarli xabar ko'rsatiladi. Kutilmagan error lar uchun umumiy Internal server error ko'rsatiladi.
#nodejs / #article / #learning
@creativecoder — but not creative coder))