שגיאות וקודי יציאה
חלק מהיחידה יסודות 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קריאת הפקודהארגומנטים של שורת הפקודהפקודותתרגלו בעצמכם: Express אונליין