كيف غيرت طريقة واحدة فقط طريقة تعاملي مع الأخطاء في Node.js

اكتشف الطريقة التي ستغير طريقة تعاملك مع الأخطاء في Node.js
توقف عن التعامل مع الأخطاء بطريقة تقليدية واستخدم هذه الطريقة الحديثة الآن

توحيد جميع الايرورات في 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
    });
})
اضافة middlware في main
app.use((error,req,res,next) =>{
    return res.status(error.statusCode || 500).json({
    status:error.statusType || "Error",
    msg:error.message
    });
});
سوف يتم عرض الايرور من خلال middlware عباره عن رسالة توضيحيه للمشكلة ونوعها واذا لم يتم ارسال اي نوع من المشاكل سوف تكون من نوع Error كما هو موضح بداخل  middlware .

أهمية توحيد الأخطاء

أ. تحسين قابلية الصيانة

عندما تكون جميع الأخطاء في التطبيق موحدة ضمن فئة واحدة، يصبح من السهل العثور على مصدر الخطأ وتحديده. بدلاً من البحث عن رسائل الأخطاء المبعثرة في أنحاء الكود، يمكنك ببساطة تتبع الفئة AppError.

ب. تعزيز التجربة المستخدمية

توحيد الأخطاء يساعد في تقديم ردود واضحة ومفهومة للمستخدمين. على سبيل المثال، إذا كان هناك خطأ في طلب API، يمكن إرسال رسالة خطأ موحدة تحتوي على رمز الحالة (statusCode) ووصف المشكلة (message).

ج. تسهيل الاختبار

عندما تكون جميع الأخطاء موحدة، يصبح اختبار الكود أسهل وأكثر دقة. يمكنك كتابة اختبارات تأكد من أن كل خطأ يتم إلقاؤه بالشكل الصحيح وبالمعلومات المناسبة.

مزايا استخدام AppError

  1. تنظيم الكود: يجعل الكود أكثر تنظيماً وسهولة في القراءة.
  2. تقليل التكرار: بدلاً من كتابة نفس الشفرة لإنشاء الأخطاء في كل مرة، يمكنك استخدام AppError لتجنب التكرار.
  3. سهولة التحديث: إذا كنت بحاجة إلى تحديث شكل الأخطاء أو إضافة خصائص جديدة، يمكنك القيام بذلك في مكان واحد فقط (داخل AppError).

توحيد الأخطاء باستخدام فئة مخصصة مثل AppError هو خطوة مهمة نحو بناء تطبيقات Node.js عالية الجودة. هذه الطريقة تساعد على تحسين التنظيم، تسهيل الصيانة، وتعزيز التجربة المستخدمية. باستخدام AppError، يمكنك التحكم الكامل في كيفية إنشاء وإدارة الأخطاء في تطبيقك، مما يجعل الكود أكثر احترافية وكفاءة.

تعليقات