الأخطاء ورموز الخروج
جزء من قسم أساسيات 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.
التحدي
سهلعندما يستخدم أحدهم أداتك بطريقة خاطئة، ينبغي أن توضّح له كيفية استخدامها، وأن تخبر الطرفية بأن العملية قد فشلت. تفعل البرامج ذلك باستخدام تدفّق الأخطاء، stderr، ورمز الخروج.
- في
notes.js، غيّر فرعelseالأخير، وهو الفرع الذي يطبعUnknown command:. تذهب الأخطاء إلى stderr، لذا اطبعها باستخدامconsole.errorبدلًا منconsole.log. - عندما يُكتب أمر غير معروف، اطبع هذين السطرين إلى stderr، بهذا الترتيب:يسمّي السطر الأول الكلمة التي كُتبت: هنا
Unknown command: remove Usage: node notes.js <command> [words]remove، منnode notes.js remove 3. أما السطر الثاني فيبقى دائمًا كما هو. انسخه كما هو تمامًا، مع<command>و[words]كما كُتبا: فهما جزء من النص، وليسا شيئًا ينبغي استبداله. - عندما لا يُكتب شيء بعد
node notes.js، اطبع سطر الاستخدام فقط إلى stderr. لا تطبعUnknown command: undefined. - في كلتا الحالتين، أنهِ البرنامج برمز الخروج 1، وهذا يعني «لقد فشل».
- يعمل الأمران
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}`);
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس أساسيات Node.js
1تشغيل JavaScript على Node
مرحبًا يا Nodeقراءة الأمروسائط سطر الأوامرالأوامرتدرّب بنفسك: Playground لـ Express