PracticU

עבודה עם קבצים ב-NodeJS

בלי כתוביותעם כתוביות
PracticU › קורס NodeJS › עבודה עם קבצים ב-NodeJS
מילון מושגים:
Node.js - סביבת ריצה שמאפשרת להריץ קוד JavaScript מחוץ לדפדפן, בעיקר בצד השרת.
דפדפן - תוכנה שמציגה דפי אינטרנט ומריצה את הקוד שבהם, ומאפשרת לגלוש בין אתרים, למשל Chrome או Firefox.
JavaScript - שפת תכנות שרצה בעיקר בדפדפן ומוסיפה אינטראקטיביות לדפי אינטרנט. רצה גם בצד השרת באמצעות Node.js.
תיקייה - מכל במערכת הקבצים שמשמש לארגון קבצים ותיקיות אחרות בתוך מבנה היררכי.
דיסק - התקן לאחסון קבוע של נתונים, כמו כונן קשיח (HDD) או כונן מבוסס זיכרון מהיר (SSD).
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
אסינכרוני - אופן פעולה שבו פעולה ארוכה רצה ברקע והתוכנית ממשיכה בלי להמתין לה, ומטופלת כשתסתיים.
Callback - פונקציה שמועברת כארגומנט לפונקציה אחרת כדי שתופעל מאוחר יותר, לרוב בסיום פעולה.

עבודה עם קבצים ב-NodeJS
בדפדפן JavaScript רצה בתוך sandbox, ואין לה גישה למערכת הקבצים והתיקיות של המשתמש. ב-Node.js יש גישה מלאה לדיסק, ולכן צריך להשתמש בה בזהירות. את הפעולות על הקבצים מבצעים בעזרת המודול המובנה fs.
גישה למודול
const fs = require('fs')
פעולות בסיסיות על תיקיות וקבצים
1. בדיקת קיום: fs.existsSync('data') מחזיר true או false.
2. יצירת תיקייה: fs.mkdirSync('data').
3. העתקה: fs.copyFileSync('data/sourcefile.txt', 'data/destfile.txt').
4. שינוי שם: fs.renameSync('data/destfile.txt', 'data/destination.txt').
5. מחיקה: fs.unlinkSync('data/destination.txt').
6. רשימת קבצים: fs.readdirSync מחזירה את שמות הקבצים בתיקייה, ואפשר לעבור עליהם בלולאה.
סינכרוני מול אסינכרוני
לכל פעולה יש גרסה סינכרונית עם הסיומת Sync, וגרסה אסינכרונית בלי סיומת. הגרסה האסינכרונית היא ברירת המחדל ב-Node.js, כי פעולה על הדיסק בשרת לא צריכה לחסום את כל הלקוחות. הגרסה הסינכרונית נוחה יותר בדוגמאות פשוטות, ולכן המרצה משתמש בה.
בגרסה האסינכרונית הקוד שאחרי הפעולה ממשיך לרוץ לפני שהיא מסתיימת. לכן צריך callback כדי לדעת מתי היא נגמרה. למשל, הודעת created צריכה להופיע רק בתוך ה-callback של mkdir, ולא מיד אחרי הקריאה.
פעולות אלה הן הבסיס לעבודה עם קבצים ב-Node.js.
השיעור הבא בקורס: קריאה וכתיבה לקובץ ב-NodeJS

פרקי ההרצאה: עבודה עם קבצים ב-NodeJS

  1. 00:00

    גישה למערכת הקבצים ב-Node.js לעומת הדפדפן

  2. 01:15

    ייבוא מודול fs לעבודה עם קבצים

  3. 01:55

    גרסאות Sync ו-Async של פונקציות הקבצים

  4. 03:30

    בדיקת קיום ויצירת תיקייה עם mkdir

  5. 05:00

    שימוש ב-callback לבדיקת קיום תיקייה

  6. 06:32

    סדר הביצוע של פעולות אסינכרוניות על הדיסק

  7. 08:58

    יצירת קובץ והעתקתו עם fs.copyFile

תמלול ההרצאה: עבודה עם קבצים ב-NodeJS

הטקסט המלא של הדקות הראשונות בהרצאה «עבודה עם קבצים ב-NodeJS» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    אנחנו מגיעים לנושא חדש שבו אנחנו הולכים להתעסק עם ה-File System, כלומר, מערכת הקבצים והתיקיות במחשב. כאשר אנחנו עובדים עם JavaScript בצד ה-Client בדפדפן, אין לנו גישה למערכת הקבצים והתיקיות שנמצאות אצלו במחשב, מפני שהדפדפן מריץ את

  2. 00:23

    JavaScript פנימית בתוכו, זה נקרא Sandbox, כאילו ארגז חול כזה, והוא לא מאשר לג'אווה סקריפט לגשת לפייל סיסטם, למערכת הקבצים והתיקיות בצד של הקליינט, במחשב שלו, ולעשות מה שג'אווה סקריפט רוצה, מפני שאחרת אתרים היו יכולים לעשות וירוסים, למחוק קבצים, להעתיק קבצים, לגלות כל מיני דברים על היוזרים.

  3. 00:46

    דפדפן תמיד חוסם את זה. יש אפשרות לעשות כמה דברים פשוטים בג'אווה סקריפט קליינט סייד, כמו לשמור קוקיז או לשמור כל מיני דברים בקליינט סייד בדיסק, דפדפן הוא זה שאחראי לזה והוא זה שעושה את זה בתיקייה מיוחדת בלבד וכמובן html עצמה יכולה לטעון קובץ לאפשר ליוזר לבחור איזשהו קובץ אבל רק בשביל לקרוא אותו או לשלוח אותו לשרת.

  4. 01:15

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

  5. 01:33

    אז הדבר הראשון שאנחנו רוצים לבצע זה לייבא את המודול שמאפשר לנו לבצע את זה. בואו נבצע פה קונסט, המודול נקרא fs, אז אני אקרא למשתנה fs. רקווייר של פייל סיסטם.

  6. 01:52

    הדבר הראשון שאנחנו הולכים לראות זה כל מיני ביצוע פעולות כלליות על קבצים ותיקיות במחשב אז דבר ראשון בואו נבדוק האם קיימת לנו איזושהי תיקייה אם 0 נקודה אקזיסט עכשיו רוב הפונקציות כאן מגיעות בשתי גרסאות אם אני כותב 0 אקזיסט אני פשוט כאילו רוצה לבדוק האם קובץ או תיקייה קיימים במחשב אבל אם אני בוחר את הפונקציה

  7. 02:27

    בלי הסיומת סינק אז בי דיפולט אני בחרתי את הגרסה של האסינק מפני שנוט ג'י אס אומרת לנו אם אתם מריצים איזושהי פעולה בסרבר סייד בנוט ג'י אס הגיוני שאתם תרצו שהפעולה הזאת לא תבצע בלוק לכל האקסקיושן של נוט ג'י אס בסרבר כי אחרת אתם בעצם תוקעים את כל הלקוחות שמבצעים שימוש בסרוויס שלכם לכן בי דיפולט זה אסינק אז אם אני כן רוצה להגיע לגרסה של הסינק,

  8. 03:01

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

  9. 03:12

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

  10. 03:28

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

  11. 03:42

    ולמעשה אני רוצה לבדוק אם היא לא קיימת, אז אני אהפוך את זה ל-NOT. אם היא לא קיימת אני רוצה ליצור אותה. אוקיי, איך אני יוצר? 0.mkdir ויש לנו את הגרסה של הסינק.

  12. 03:56

    אז בוא תיצור לי בבקשה תיקייה שנקראת דאטה. בואו רגע נריץ את זה, כרגע אין לי פה תיקייה שנקראת דאטה ולכן הוא אמור ליצור לי. נו דאפ. והנה אני רואה שהוא יצר לי תיקייה שנקראת דאטה.

  13. 04:10

    אם הייתי רוצה להריץ את כל הסיפור הזה בצורה א-סינכרונית, הדבר הזה היה הרבה יותר מורכב. אם כמובן לא הייתי עוטף את זה בפרומיס או מבצע אסינק והווייט לסיפור הזה, אז איך בעצם היינו יכולים לעשות את כל הסיפור הזה א-סינכרוני?

  14. 04:28

    0.exist שימו לב שהיא מחזירה לי void אני לא יכול עכשיו לבצע פה בדיקה עם if או עם not וכולי מפני שהיא לא מחזירה לי תשובה אז היא אומרת לי כזה דבר תגיד לי באיזה תיקייה אתה רוצה לבדוק בואו ניתן לה את אותה תיקייה data ובינתיים שאני לא אשכח אני גם ארחק את התיקייה הזאת במחשב מהכתובת שלי אבל אז ראינו שכל הפונקציות האסינכרוניות מקבלות בעצם callback

  15. 05:00

    ואנחנו רואים שהיא מקבלת איזשהו callback בולעני, אני רואה שהוא אומר לי exists והcallback תגיד לי אם הוא קיים או לא קיים.

  16. 05:10

    אז בואו נבצע exists והנה כאן אני יודע אם הוא קיים או לא קיים. אם not exist, בסדר, אני רוצה לבנות בדיוק את אותו הקוד של מקודם, if not exist, מה אני רוצה לעשות?

  17. 05:28

    fk, סליחה, 0.mk.mkdir אני רוצה לקחת את הגרסה האסינכרונית הזאת הדיפולטית mkdir make dir ותגיד לי איזה תיקייה אתה רוצה ליצור כי הרי היא לא קיימת אז בואו ניצור את data ואז אני לא יכול בעצם לבצע שום דבר אני לא יכול להגיד שהתיקייה נוצרה או משהו כזה אני חייב עכשיו לקבל תשובה לדעת מתי בעצם התיקייה נוצרה בכדי לדעת מה בעצם

  18. 05:59

    לעשות הלאה יש לנו כאן הופה הוא נסגר לי רציתי רק לראות את התוכסה הנוספת שקיימת לנו, אז יש לנו כאן את זה והוא פשוט מקבל, איפה זה?

  19. 06:14

    ויז'ואל סטודיו עדיין, ויז'ואל סטודיו קוד עדיין, יש להם פה את הבעיה הזאת, אחד, מה יהיה?

  20. 06:27

    אני רואה שאני מסתבך איתו, callback, אז זה בעצם, הוא מראה לי פה שהcallback היא callback ללא פרמטרים, אוקיי? זה לא כזה משנה האופציות האלה, ולכן כל מה שנעשה זה נגיד לו, תשמע, הנה הקולבאק שבעצם מציינת שהצלחת לבצע את מה שאתה אמור לבצע, קונסול לוג done.

  21. 06:53

    כאשר אם הייתי רוצה לרשום קונסול לוג done או created, בואו נקרא לזה created, אז הייתי יכול בהקשר הקודם לכתוב את ה-created פה, מפני ש-fs.mkdir.sync הייתה תוקעת לי את הזרימה של התוכנית עד ש-Node.js לא הייתה

  22. 07:18

    מצליחה או מסיימת לחלוטין לבנות את התיקייה, כי זה גישה לדיסק, יכול להיות שהיה לוקח לה טיפה זמן יחסית ל-Execution רגיל, אז היא לא הייתה זזה מילימטר.

  23. 07:28

    וכאן, ברגע שאני מגיע לקוד הזה, זאת אומרת שהוא כבר סיים ליצור את התיקייה. בהקשר הזה, לא היינו יכולים לכתוב את ה-Created כאן לדוגמה.

  24. 07:39

    נניח שהייתי מריץ את הקוד הזה בצורה כזאת. זה לא היה ריצה נכונה, זאת לא הייתה ריצה נכונה. למה? מפני שזה אסינכרוני, זאת אומרת שהוא מתחיל לעבוד, ואולי הוא לא סיים ליצור את התיקייה, וכבר אני מציג לו created, או במקום לעשות לו, במקום להציג created, אני כבר רוצה לשמור לו קובץ בתוך התיקייה,

  25. 08:00

    אני לא יכול. היא עדיין לא קיימת באמת בדיסק, או שכן או שלא, אני לא יודע. לכן, ברגע שאני עובד עם פונקציות אסינכרוניות, יש לנו את ה-issue הזה שאני חייב לדעת מתי הן מסיימות על ידי callback function.

  26. 08:13

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

  27. 08:41

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

  28. 08:58

    התיקייה נוצרה אז הוא לא יבצע פה שום דבר ואנחנו רוצים לראות כמה דברים פשוטים נוספים. בואו נניח שאנחנו רוצים שיהיה לנו פה איזשהו קובץ בתוך התיקייה הזאת.

  29. 09:11

    נקרא לקובץ הזה sourcefile.txt. I'm a sourcefile. Good. ואנחנו רוצים לבצע העתקה של הקובץ הזה. בואו ניקח את fs.copy file ואנחנו רוצים את הגרסאות של הסינק. שוב, בהמשך ממש מהר אנחנו הולכים לעבור לגרסאות של הסינק כאשר אנחנו נבצע כתיבה וקריאה מקבצים.

  30. 09:40

    אז יש לנו data והתיקייה ובתוכה יש לנו sourcefile.txt ואנחנו רוצים לעשות קופי, בואו נייצר קובץ חדש data,

לקורס המלא: קורס NodeJS אונליין בעברית

ההרצאה הקודמת: הסבר על Observables - חלק 2

ההרצאה הבאה: קריאה וכתיבה לקובץ ב-NodeJS

הרצאות קשורות מקורסים אחרים

  • עבודה עם קבצים ב-Xcode - חלק 1
  • עבודה עם VI - חלק 1
  • עבודה עם קבצים של אקסל בתוך Qlik - חלק 1
  • עבודה עם קבצים בג'אווה - Reading Properties File

קורסים נוספים במסלול

  • קורס יסודות HTML - בניית אתר אינטרנט פשוט
  • קורס CSS 3 - בדגש על Flex & Grid
  • קורס Javascript כולל JQuery
  • קורס ג'אווה סקריפט מעשי - JavaScript
  • קורס TypeScript
  • קורס ריאקט - React