שתי תוכניות ראשונות ב node.js

נצלול לעבודה עם node.js דרך שתי תוכניות דוגמא. גם אם לא כל שורה תהיה ברורה בשיעור זה זה בסדר ובשיעורים הבאים נמשיך ללמוד יותר לעומק על כל אחד מהחלקים שיופיעו כאן.

1. הפעלת קוד JavaScript והדפסה למסך

נתחיל בקטן- כל תוכנית node.js היא בעצם תוכנית JavaScript ולכן אפשר לכתוב קוד JavaScript רגיל כמו שהיינו כותבים בדפדפן ולקבל את אותן תוצאות. נשים לב רק שאין לנו document או window ושבינתיים כל התוכניות רצות מהמסך השחור ומדפיסות טקסט אליו.

הקלידו את התוכנית הבאה בקובץ בשם demo1.js ושימרו:

// calculate and return n!
function factorial(n) {
    let res = 1;
    for (let i=1; i <= n; i++) {
        res *= i;
    }
    return res;
}

console.log(factorial(4));

נראה שתי דרכים להפעיל את התוכנית:

  1. מתוך VS Code נכנס בתפריט צד לסימן המשולש ונלחץ על הכפתור Run and Debug. אחרי שהרצתם תוכלו להגדיר נקודת עצירה באמצעות לחיצה על שורה שבה תרצו לעצור בקוד ואז להריץ מחדש ותוכלו לראות ש VS Code עוצר את הריצה בדיוק איפה שסימנתם ומראה לכם את ערכי המשתנים.
     
  2. מתוך ה CMD - הכנסו לתיקיית הפרויקט שיצרתם ורשמו:
     
$ node demo1.js

מה למדנו מהתרגיל:

  1. קוד node.js תומך בכתיב ES6-7-8, ולכן אפשר היה להשתמש ב let כדי להגדיר משתנים. שימו לב שיש ל node רגישות מיוחדת סביב שימוש במודולים ואנחנו נדבר על זה בשיעורים הבאים.
     
  2. בהיעדר דפדפן, הפקודה console.log היא דרך מועילה לראות מידע על המסך.
     
  3. כל שאר הקוד שנכתוב הוא קוד JavaScript תקני לכל דבר, ולכן חשוב מאוד להכיר טוב את שפת JavaScript כדי להבין את Node.
     

2. שימוש בפקודת fetch כדי להביא מידע מהרשת

נמשיך לדוגמא שניה כדי לדבר על תקשורת ב node.js. נוד מנסה לתמוך בכמה שיותר APIs שקיימים בדפדפן, ואחד המפרוסמים שבהם הוא פקודת fetch, שיודעת למשוך מידע משרת מרוחק. נשתמש בה כדי להתחבר ל API של מלחמת הכוכבים, לקבל JSON מהנתיב:

https://swapi.dev/api/people/1/

ולהציג את המפתח name שלו.
 

הקלידו את התוכנית הבאה בקובץ בשם demo2.js:

async function main() {
    const res = await fetch('https://swapi.dev/api/people/1');
    const data = await res.json();
    console.log(data.name);
}

main();


הפעם התוכנית שלי כבר משתמשת ב async/await שגם הוא נתמך בצורה מלאה ב node. התוכנית מגדירה פונקציה אסינכרונית שפונה ל API ומחזירה Promise שבסוף התהליך ידפיס את הערך שמתאים למפתח `name` ב JSON שחוזר.
מעניין לשים לב שאני מפעיל את main בלי "לחכות" לתוצאה. באופן אוטומטי node.js לא מסיים את התוכנית עד שכל ה Promises הסתיימו, וכך אנחנו רואים את ההדפסה אפילו שאין await לפני הפעלת ה main.
ניסיון להפעיל את התוכנית בלי הגדרת הפונקציה האסינכרונית ייכשל בגלל שברירת המחדל של node.js היא ליצור מודולים בכתיב שנקרא CommonJS, ובכתיב זה אין אפשרות להשתמש ב await מחוץ לכל פונקציה. בשיעורים הבאים נדבר על האפשרויות השונות לכתיבת מודולים בפרויקט node.js ונבין מתי כן נוכל להשתמש ב await בקוד החיצוני ביותר.
 


תוכנית ראשונה:

// calculate and return n!
function factorial(n) {
    let res = 1;
    for (let i=1; i <= n; i++) {
        res *= i;
    }
    return res;
}

console.log(factorial(4));

תוכנית שנייה:

async function main() {
    const res = await fetch('https://swapi.dev/api/people/1');
    const data = await res.json();
    console.log(data.name);
}

main();