
fs.readFile עם קידוד utf-8, וממירה את התוכן לאובייקטים בעזרת JSON.parse. הקריאה עטופה בהבטחה (Promise) שמחזירה שגיאה במקרה של כשל.JSON.stringify עם הזחה של 4 רווחים שומר את הקובץ קריא לעין. הכתיבה נעשית ב-fs.writeFile.await הקונטרולר מחזיר תשובה ריקה, כי הוא לא ממתין לתוצאה של הקריאה לקובץ.הטקסט המלא של הדקות הראשונות בהרצאה «שמירת מידע בקובץ JSON - קורס NodeJS» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
עכשיו כשהכל מחולק למודולים כמו שצריך אנחנו כמעט יכולים לגשת ולהתחיל לבנות את שאר הראוטים אבל יש פה איזה דבר אחד שהוא טיפה יהיה בעייתי.
איפה המידע שלנו יושב אם אנחנו מסתכלים על הכביכול דאטאבייס שיש לנו כאן יש לנו כאן איזה קובץ db שמגדיר את המוצרים כמשתנים hardcoded או אובייקטים hardcoded שמתווספים כאן.
אוקיי, זה עובד, זה מעולה, אבל אם אנחנו עכשיו הולכים לבנות לדוגמה פונקציית פוסט שהולכת להוסיף מוצר חדש והיא אכן תוסיף אותו לאוסף הזה, מה יקרה אם אנחנו נסגור את השרת ונריץ אותו אחר כך עוד פעם?
האם המוצר הזה ימשיך להתקיים? אז ברור שלא, מפני שזה מערך שיושב בזיכרון. אנחנו יכולים להוסיף את האובייקט למערך וכמובן, אם אנחנו נגלוש בשביל לקבל אותו אז אנחנו נקבל אותו אבל ברגע שאנחנו נסגור את השרת בגלל שיש לנו פיתוח נוסף לבצע או סתם בגלל שהשרת נפל ואנחנו רוצים להעלות
אותו כל המוצרים שהוספנו ייעלמו כי הם סתם במערך בזיכרון אז לפני שנבוא ונתחיל לבצע כל מיני ראוטים קצת יותר מורכבים כמו פוט ופוסט ודיליט וכדומה אנחנו רוצים לגרום למידע הזה מה שנקרא להתמיד.
או שנשמור אותו בדאטאבייס או שנשמור אותו באיזשהו קובץ. כרגע אנחנו הולכים לשמור אותו בקובץ בהמשך נתעסק עם דאטאבייסים. קובץ זה פשוט הכי קל לביצוע כרגע וכבר למדנו איך להתעסק עם קבצים.
אז כל מה שאנחנו רוצים לעשות זה לצרף איזשהו קובץ json שמחזיק את כל המידע הזה במקום הdb.js הזאת. אז יש לי קובץ שהכנתי בואו רגע נסגור פה את וניפטר מהקובץ הזה, נעשה לו delete, כן, תמחק לי אותו.
התיקייה של הדאטאבייס היא ריקה. בואו ניגש לפה ונראה שיש לנו איזשהו קובץ שנקרא products.json, אנחנו יכולים לגרור אותו פשוט לפה, ואנחנו רואים שהוא פשוט מעתיק אותו לפרויקט שלנו, את זה אפשר למחוק עכשיו, הוא חלק מהפרויקט, ויש פה 77 מוצרים של חברה פיקטיבית שנקראת Northwind.
Northwind זה חברה תחילת שנות ה-90, פיקטיבית כזאת, שמייקרוסופט יצרו או לקחו, שמכילה דאטאבייס ומאגר נתונים שנעבוד איתו בהמשך, כאשר זה המוצרים של החברה הזאת.
ומה שהוצאתי מכל מוצר זה רק את ה-ID, את השם, את המחיר ואת הכמות מוצרים במלאי ויש לנו עכשיו את כל המוצרים של חברת Northwind בכובד ג'ייסון ואנחנו רוצים לחבר אותו לפרויקט שלנו.
אז אם אנחנו מסתכלים על ה-Data Access Layer קודם כל אין לנו כבר כזה קובץ DB אנחנו רוצים לבצע פעולה אחרת. בואו נראה איזה שינויים אנחנו צריכים לעשות בשביל להתחבר לקובץ הזה. בגלל שאנחנו מתעסקים עם קבצים אז אנחנו צריכים File System.
בואו נבצע require לפייל סיסטם. אנחנו רוצים את ה-file name, מה השם של הקובץ? השם של הקובץ צריך להיות יחסית ל-root, לתיקיית root שלנו, אז יש לנו פה נקודה סלאש והוא נמצא בתיקייה שנקראת דאטאבייס ובתוכה הוא נקרא products.json.
זה השם של הקובץ. כעת אנחנו רוצים לבנות פונקציה ראשונה, All Products שמה שהיא מאפשרת לעשות זה לגשת לקובץ לטעון את כל המידע ולהביא לנו את כל המידע הזה ואנחנו ראינו כבר שהכי טוב לעשות את כל הפעילות הזאת בצורה אסינכרונית אנחנו כבר היה לנו פה סדרה של סרטונים כאלה של איך אנחנו מתעסקים עם פעילויות אסינכרוניות איך אנחנו מחצינים את זה על ידי פורמיס ולמה זה חשוב לביצוע ובטח שאם אני ניגש לפייל סיסטם
או לקבצים או לתיקיות או לדאטאבייס עצמו אנחנו רוצים לעשות את זה כאסינכרוני.
אז מה שראינו זה להחזיר promise שיש בו resolve rechecked והוא מפעיל את הפונקציה ומה שאנחנו רוצים לבצע בפונקציה הזאת זה לגשת לפייל סיסטם read file לא read file sync אלא אסינכרוני הנה ה-file name שיש לנו הנה אנחנו רוצים לקרוא אותו כ-utf-8 מפני שזה תכלס מחרוזת
של utf-8. ברגע שאתה מסיים לקרוא את הקובץ תקרא לפונקציה הזאת שאו שמקבלת אובייקט שגיאה או שאם אין שגיאה היא מקבלת את ה-file-content תוכן של הקובץ.
אם הייתה שגיאה אנחנו רוצים to reject את השגיאה ולא להמשיך הלאה. אם לא הייתה שגיאה אנחנו רוצים להפוך את כל