PracticU

שליפת מוצר בודד מתוך MongoDB

בלי כתוביותעם כתוביות
PracticU › קורס NodeJS › שליפת מוצר בודד מתוך MongoDB
מילון מושגים:
MongoDB - מסד נתונים מסוג NoSQL שמאחסן נתונים כמסמכים בפורמט דמוי JSON, בלי מבנה טבלאי קשיח.
MySQL - מערכת ניהול מסדי נתונים יחסיים בקוד פתוח, נפוצה מאוד באתרים וביישומי אינטרנט.
מודל - רכיב שמייצג את הנתונים ואת הלוגיקה העסקית באפליקציה. גם ייצוג מופשט של מערכת או תהליך.
קונטרולר - רכיב שמתווך בין הממשק לבין הלוגיקה והנתונים, מקבל בקשות ומחליט כיצד לטפל בהן (למשל בדפוס MVC).
בינארי - ייצוג מידע בבסיס 2 בעזרת הספרות 0 ו-1. גם קובץ הכולל קוד מכונה ולא טקסט קריא.
באג - תקלה או שגיאה בקוד שגורמת לתוכנה להתנהג בניגוד למצופה.
GET - שיטת HTTP לבקשת מידע מהשרת בלי לשנות אותו. הפרמטרים מועברים בדרך כלל בכתובת.
Postman - כלי לבדיקת API: שליחת בקשות HTTP לשרת ובחינת התגובות, נפוץ בפיתוח ובבדיקות.

שליפת מוצר בודד מתוך MongoDB
שליפת מוצר אחד לפי קוד דורשת התאמות, כי המזהה ב-MongoDB שונה ממה שהיה ב-MySQL, וגם סוגו אינו מספר.
השלבים העיקריים
1. מתאימים את שם המזהה: MongoDB נותן לכל document שדה _id. כדי לא להתבלבל, משתמשים בשם הזה בכל מקום: במודל, בקונטרולר ובפונקציות ה-logic (בעזרת בחירה מרובה ב-Ctrl+D, בזהירות כדי לא לשנות מקומות לא קשורים).
2. מסירים את בדיקת המספר: ה-_id הוא מחרוזת, לא number, ולכן מוחקים את validateRouteId ואת ה-schema שלו, והסוג ב-Joi משתנה ל-string.
3. כותבים את getOneProductAsync: הקוד דומה לשליפת כל המוצרים, אבל משתמשים ב-findOne עם אובייקט שמציין איזה מזהה לחפש.
4. ממירים ל-ObjectId: המזהה השמור הוא BSON מסוג ObjectId, ולכן המחרוזת שמגיעה מהבקשה נעטפת ב-mongodb.ObjectID(...), שמחזיר אובייקט בינארי להשוואה.
5. מדווחים: אם יש שגיאה קוראים ל-reject, אחרת ל-resolve עם המוצר. אם אין מוצר כזה הקונטרולר מחזיר 404.
באגים שנתפסו בדרך
- שם הפונקציה הוא ObjectID (I גדולה, D גדולה). ה-IntelliSense מציע שם אחר ולכן מקבלים Not Found.
- בקונטרולר נשאר הסימן + שהמיר את המחרוזת למספר ויצר NaN. הסירו אותו גם בשאר המקומות.
אחרי התיקונים בקשת GET עם המזהה ב-Postman מחזירה את המוצר הבודד.
השיעור הבא בקורס: הוספת מוצר חדש ל-MongoDB

פרקי ההרצאה: שליפת מוצר בודד מתוך MongoDB

  1. 00:00

    המוצר מזוהה עם underline id

  2. 01:24

    שינוי שם השדה במודל ל-underline ID

  3. 02:51

    עדכון שמות ה-ID בקונטרולר

  4. 04:20

    הסרת ולידציית Route ID המספרית

  5. 05:17

    המרת ה-ID למחרוזת

  6. 05:58

    בניית Get One Product עם findOne

תמלול ההרצאה: שליפת מוצר בודד מתוך MongoDB

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

  1. 00:04

    אנחנו רוצים עכשיו לטפל במוצר אחד. אז יש לנו פה את הפונקציה ב-products logic שמקבלת קוד של מוצר ואמורה להחזיר את המוצר האחד והיחיד אבל אם אנחנו נזכר נראה שה-id של מוצר זה לא השם id בואו נסתכל רגע בפוסטמן זה underline ID, קו תחתון ID. למה?

  2. 00:36

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

  3. 01:00

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

  4. 01:13

    כי לפעמים אנחנו נטעה אולי ובמקום underline נכתוב בלי ולפעמים אם כשלא צריך. לכן אני אומר בואו נקרא ל-ID בכל מקום מעכשיו והלאה underline ID.

  5. 01:29

    לפני שאנחנו מגיעים לפה יש לנו עוד כל מיני מקומות שבהם אנחנו צריכים לעבור ולשנות את השם ID ל-underline ID לדוגמה במודל.

  6. 01:42

    בואו נסמן ID ונבצע את הטריק עם ה-Ctrl-D. אתם רואים שהוא מסמן לי מספר חבר'ה כאלה? וניתן להם underline ID. זה מקום אחד לדוגמה שאנחנו צריכים. בואו נראה איפה עוד אנחנו צריכים לשנות כאן.

  7. 02:03

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

  8. 02:26

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

  9. 03:05

    הדבר הבא זה הקונטרולר, בקונטרולר יש המון מקומות שבהם כתוב ID, אנחנו רואים את זה פה. אז כאן אנחנו נמצאים בפונקציה get one product ואנחנו רוצים, להתחיל ולשנות את החבר'ה האלה.

  10. 03:23

    אז יש לנו פה ids, כל id הופך להיות underline, הנה אנחנו רואים כאן, בואו נלך פה למטה, בפוסט אני לא רואה שיש לי, בפוט אני רואה שיש לי, כאן id נשנה ל-underline, id, patch אותו סיפור, פשוט פעם אחת אנחנו עוברים,

  11. 03:55

    כי בנינו את זה לפני זה כ... כsql ואם אנחנו נמצאים כבר פה ב delete ושינינו אז אין לנו את הבדיקה הזאת שאנחנו רואים והאמת עכשיו שאני חושב על זה בואו נסתכל רגע על get one product כאן אנחנו מבצעים איזושהי ולידציה של ה-id לפי מה לפי מספר נכון ולידייט ראוט איי-די, או הנה זאת עוד בעיה שיכולה להיות, בואו נסתכל רגע על הוולידייט

  12. 04:40

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

  13. 04:53

    טוב, אז בואו ניפטר רגע מראוט איי-די ולידיישן סכמה, קודם כל אין לנו צורך בזה, אין לנו צורך ב-Validate Route ID, ביי ביי.

  14. 05:06

    טוב, יש לנו פה כל מיני שינויים בגלל שיש לנו את השינוי הזה עם ה-SQL ל-MongoDB. כאן נרשום סטרינג ונתחיל לעבור ולשנות את ה-IDs לסטרינגים, סטרינג וסטרינג, מפני שהוא לא מספר.

  15. 05:31

    עוד משהו שאנחנו היינו צריכים זה פה כמובן ב-Get One Product, אין לי את הבדיקה הזאת. קיבלנו ID, הלכנו, הבאנו אותו. אם אין לי מוצר כזה אז אני מחזיר 404, גם אם הוא טעה במחרוזת של ה-ID.

  16. 05:58

    ויש לנו כאן את ההחזרה של המוצר. אז עכשיו אנחנו יכולים לגשת ולבנות את get one product async. זאת נמצאת פה, get one product async, הנה היא לא מקבלת ID אלא underline ID, אפשר להיפטר מכל התוכן הזה ומה-async, אולי גם פה יש לנו כל מיני ID's אני רואה, אבל נטפל בהם בהמשך.

  17. 06:26

    טוב, אז מה אנחנו רוצים לעשות? אנחנו רוצים לבצע משהו דומה למה שביצענו פה. אז אני כרגע אעשה copy, paste, כי זה מאוד מאוד דומה. הפונקציה הקודמת החזירה את כל המוצרים, יש לנו פה promise ויש לנו resolve וreject, אנחנו ניגשים לקולקשן של כל המוצרים, ובמקום find אנחנו אומרים לו find1.

  18. 06:53

    מקבלת אובייקט שאומר איזה ID לחפש,

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

ההרצאה הקודמת: שליפת כל המוצרים מתוך MongoDB

ההרצאה הבאה: הוספת מוצר חדש ל-MongoDB

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

  • מבוא ל-MongoDB
  • הצגת פריט בודד - SingleOrDefault
  • שליפת מידע עם Azios
  • שליפת כל הסיסמאות של הארגון - מתוך זיכרון של DC

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

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