![]() |
توقف عن التعامل مع الأخطاء بطريقة تقليدية واستخدم هذه الطريقة الحديثة الآن |
توحيد جميع الايرورات في Node.js باستخدام class error
في تطوير التطبيقات باستخدام Node.js، من المهم أن يكون لديك نظام موحد للتعامل مع الأخطاء. هذا النظام يساعد على تسهيل تتبع المشاكل وتحسين جودة الكود، بالإضافة إلى توفير تجربة أفضل للمطورين والمستخدمين. أحد الطرق الفعالة لتحقيق ذلك هو إنشاء فئة أخطاء مخصصة (Custom Error Class) تجمع بين جميع أنواع الأخطاء في مكان واحد، مما يسهل إدارة وتنظيم الأخطاء.
في هذا المقال، سنناقش كيفية استخدام فئة AppError لتوحيد جميع الأخطاء في تطبيق Node.js. سنتناول كيفية تصميم هذه الفئة واستخدامها بشكل فعال لضمان تنظيم الأخطاء وإدارتها بكفاءة.
يُعد توحيد جميع الايرورات في Node.js باستخدام class error طريقة فعالة لتحسين سهولة قراءة كود التطبيق وصيانته وقابليته للاختبار , يُعد Error في حالة الريكويست في Node.js كائنًا يُمثل خطأً حدث أثناء معالجة طلب HTTP.
ما هو class error؟
هو نموذج برمجي يسمح لك بإنشاء أنواع مختلفة من الأخطاء.
تصميم فئة AppError
لإنشاء فئة مخصصة للأخطاء، يمكننا استغلال ميزة الوراثة في JavaScript من خلال توسيع الفئة الأساسية Error. الفئة الجديدة ستسمى AppError، وهي ستكون مسؤولة عن تخزين وتنظيم المعلومات المتعلقة بالخطأ مثل الرسالة (message)، نوع الحالة (statusType)، ورمز الحالة (statusCode).
فوائد استخدام class error
- تحسين سهولة قراءة كود التطبيق:
- تسهيل صيانة كود التطبيق:
- تحسين قابلية اختبار كود التطبيق:
- تسهيل فهم سلوك التطبيق في حالة حدوث أخطاء:
- كيف يتم توحيد جميع الايرورات باستخدام class error؟
إنشاء class error لكل نوع من أنواع الأخطاء.
استخدام class error لمعالجة جميع الأخطاء بطريقة موحدة.
انشاء class error لتوحيد errors الخاصه بمشروع nodejs
class AppError extends Error {
constructor(){
super();
}
create(message,statusType,statusCode){
this.message = message;
this.statusType = statusType;
this.statusCode = statusCode;
return this; // حتى يتم ارجاع كل الاسماء عند استخدام ال fun
}
}
module.exports = new AppError();
شرح الكود
الوراثة: يتم توسيع الفئة Error باستخدام extends، مما يعني أن AppError ستأخذ كل الخصائص والميزات الموجودة في الفئة الأساسية Error.
دالة create: تُستخدم لإنشاء كائن خطأ جديد وإضافة البيانات الخاصة بالخطأ مثل الرسالة والحالة ورمز الحالة.
إرجاع الكائن: يتم إرجاع الكائن نفسه (this) بعد إضافة البيانات، مما يتيح استخدام الكائن مباشرة بعد إنشائه.
كيفية استخدام AppError داخل مشروع Node.js
const getUser = handelErrors(async(req,res,next)=>{
const user = await User.findOne(res.body.email);
if (!user) {
return next(appError.create("the user is not found",status.Fail,404));
}
return res.json({
data:user
});;
})
بدلا من استخدام
const getUser = handelErrors(async(req,res,next)=>{
const user = await User.findOne(res.body.email);
if (!user) {
const error = new Error();
error.message = "the user is not found";
error.statusCode = 404;
return next(error);
}
return res.json({
data:user
});
})
app.use((error,req,res,next) =>{
return res.status(error.statusCode || 500).json({
status:error.statusType || "Error",
msg:error.message
});
});
أهمية توحيد الأخطاء
أ. تحسين قابلية الصيانة
ب. تعزيز التجربة المستخدمية
ج. تسهيل الاختبار
مزايا استخدام AppError
- تنظيم الكود: يجعل الكود أكثر تنظيماً وسهولة في القراءة.
- تقليل التكرار: بدلاً من كتابة نفس الشفرة لإنشاء الأخطاء في كل مرة، يمكنك استخدام AppError لتجنب التكرار.
- سهولة التحديث: إذا كنت بحاجة إلى تحديث شكل الأخطاء أو إضافة خصائص جديدة، يمكنك القيام بذلك في مكان واحد فقط (داخل AppError).