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

תרגלו בעצמכם: Express אונליין