Menu
CoddyTech

الأخطاء ورموز الخروج

جزء من قسم أساسيات Node.js في رحلة Node.js على Coddy. الدرس 5 من 33.

عندما يفشل أمر، يحتاج الشخص عند الطرفية إلى معرفة السبب، ويحتاج أي برنامج شغّل برنامجك إلى معرفة أنه فشل.

للبرنامج تدفّقا إخراج: stdout للنتائج وstderr للأخطاء، وتُكتب باستخدام console.error. عند انتهاء البرنامج، يعيد رمز خروج: تعني 0 أنه عمل بنجاح، وأي قيمة أخرى تعني أنه فشل. يوقف process.exit(1) البرنامج فورًا برمز 1.

// node divide.js 6 0
const [a, b] = process.argv.slice(2).map(Number);
if (b === 0) {
    console.error('Cannot divide by zero');
    process.exit(1);
}
console.log(a / b);

تعرض الطرفية بجانب شفرتك stderr باللون الأحمر، وتطبع رمز الخروج عندما لا يكون 0.

challenge icon

التحدي

سهل

عندما يستخدم أحدهم أداتك بطريقة خاطئة، ينبغي أن توضّح له كيفية استخدامها، وأن تخبر الطرفية بأن العملية قد فشلت. تفعل البرامج ذلك باستخدام تدفّق الأخطاء، stderr، ورمز الخروج.

  1. في notes.js، غيّر فرع else الأخير، وهو الفرع الذي يطبع Unknown command:. تذهب الأخطاء إلى stderr، لذا اطبعها باستخدام console.error بدلًا من console.log.
  2. عندما يُكتب أمر غير معروف، اطبع هذين السطرين إلى stderr، بهذا الترتيب:
    Unknown command: remove
    Usage: node notes.js <command> [words]
    يسمّي السطر الأول الكلمة التي كُتبت: هنا remove، من node notes.js remove 3. أما السطر الثاني فيبقى دائمًا كما هو. انسخه كما هو تمامًا، مع <command> و[words] كما كُتبا: فهما جزء من النص، وليسا شيئًا ينبغي استبداله.
  3. عندما لا يُكتب شيء بعد node notes.js، اطبع سطر الاستخدام فقط إلى stderr. لا تطبع Unknown command: undefined.
  4. في كلتا الحالتين، أنهِ البرنامج برمز الخروج 1، وهذا يعني «لقد فشل».
  5. يعمل الأمران add وlist كما كانا من قبل. لا يزال node notes.js add Buy milk يطبع Adding: Buy milk وينتهي برمز الخروج 0.

جرّب ذلك: اضغط على «تشغيل» والمربع بعد $ node notes.js فارغ. سترى سطر الاستخدام باللون الأحمر، وستعرض الطرفية رمز الخروج 1. ثم اكتب remove 3 واضغط على Enter: سترى Unknown command: remove وسطر الاستخدام، كليهما باللون الأحمر، ورمز الخروج 1. ثم اكتب add Buy milk: سترى Adding: Buy milk باللون المعتاد، ولن يظهر رمز خروج، لأن الطرفية تخفي القيمة 0.

جرّب بنفسك

// تبدأ أداة ملاحظاتك من هنا.
const [command, ...words] = process.argv.slice(2);
const text = words.join(' ');

if (command === 'add') {
    console.log(`Adding: ${text}`);
} else if (command === 'list') {
    console.log('No notes yet');
} else {
    console.log(`Unknown command: ${command}`);
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس أساسيات Node.js

تدرّب بنفسك: Playground لـ Express