PracticU

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

בלי כתוביותעם כתוביות
PracticU › קורס NodeJS › הוספת מוצר חדש ל-MongoDB
מילון מושגים:
MongoDB - מסד נתונים מסוג NoSQL שמאחסן נתונים כמסמכים בפורמט דמוי JSON, בלי מבנה טבלאי קשיח.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.
POST - שיטת HTTP לשליחת נתונים לשרת כדי ליצור או לעדכן משאב, למשל שליחת טופס.
Promise - אובייקט ב-JavaScript שמייצג תוצאה עתידית של פעולה אסינכרונית, שתושלם בהצלחה או תיכשל.
Callback - פונקציה שמועברת כארגומנט לפונקציה אחרת כדי שתופעל מאוחר יותר, לרוב בסיום פעולה.
Postman - כלי לבדיקת API: שליחת בקשות HTTP לשרת ובחינת התגובות, נפוץ בפיתוח ובבדיקות.
JSON - פורמט טקסט קריא לייצוג נתונים מובְנים כזוגות מפתח-ערך, נפוץ להחלפת מידע בין שרת ללקוח.
REST - סגנון לבניית ממשקי API מעל HTTP, המבוסס על משאבים ועל שיטות סטנדרטיות כמו GET ו-POST.

הוספת מוצר חדש ל-MongoDB
מוסיפים מוצר חדש ל-MongoDB ושומרים גם את קוד הקטגוריה כ-ObjectId. את ה-_id של המוצר אין צורך לספק, כי MongoDB מייצר אותו.
השלבים העיקריים
1. מרחיבים את המודל: מוסיפים categoryId לקונסטרקטור ולמחלקה.
2. מוסיפים ולידציה: ב-Joi הוא string ו-required בהוספה ובעדכון מלא, ובעדכון חלקי (patch) רק string. מוסיפים הודעת שגיאה כמו missing category id, כדי להיות אחידים עם שאר ההודעות.
3. מעדכנים את הקונטרולר: ב-POST מוסיפים את request.body.categoryId לבדיקה. השם categoryId נשמר זהה בכל מקום כדי לא לטעות.
4. כותבים את addProductAsync: מחזירים Promise, ניגשים ל-products ומשתמשים ב-insertOne עם המוצר. ה-callback מקבל שגיאה ו-info שמתאר מה קרה, כולל result עם מספר הפריטים שנוספו. מחזירים את המוצר שכבר כולל _id.
5. ממירים את קוד הקטגוריה: בבדיקה הראשונה categoryId נשמר כ-string ולא כ-ObjectId. לכן לפני ההוספה מציבים product.categoryId = mongodb.ObjectID(product.categoryId).
6. בודקים: שולחים POST ב-Postman עם JSON בלי _id, ובודקים ב-Robo 3T שהמוצר נוסף ושה-categoryId הוא ObjectId.
שימו לב
- אפשר היה להמיר את הסוג ברמת המודל, אבל זה היה דורש לשנות את ה-Joi. המרצה אומר שבהמשך תוצג טכניקה פשוטה יותר.
- Robo 3T לפעמים נתקע, ו-Refresh עוזר.
בסוף אפשר להוסיף מוצר חדש דרך ה-REST service.
השיעור הבא בקורס: עדכון מלא של מוצר ב-MongoDB

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

  1. 00:00

    יצירת underline ID אוטומטית בהוספה

  2. 00:40

    הוספת Category ID כ-Object ID

  3. 01:21

    הוספת Category ID לוולידציות

  4. 03:26

    התאמת הקונטרולר להוספה

  5. 04:34

    שימוש בפונקציה insertOne

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

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

  1. 00:03

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

  2. 00:17

    אנחנו לא צריכים כמובן להביא לו את ה-underline ID, אנחנו יכולים לייצר ID כזה ולתת לו, ואז בעצם אנחנו אומרים למונגו דיבי לא לעשות את זה, אבל אין צורך, מונגו דיבי עושה את זה בשבילנו.

  3. 00:32

    אנחנו נותנים name, price, stock ואנחנו גם רוצים הפעם לתת category ID שזה סטרינג ואוטומטית מונגו דיבי תדע איך ליישם את זה כאובג'קט ID. אנחנו צריכים לשלב פה גם את הcategory ID בכל הנושא הזה.

  4. 00:56

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

  5. 01:35

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

  6. 02:08

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

  7. 02:24

    כאן כל הקונספט של ג'וי מוכן. האמת שפה אני רואה שיש לנו את זה שאם הוא לא נמצא אז אנחנו צריכים לומר לו Missing אז אולי נוסיף את זה פה ויש לנו רק את ה-required, אין לנו צורך בשני אלה וזה יהיה missing category ID רק בכדי שנהיה ממש אחידים עם כל הקוד הקודם שהיה לנו.

  8. 03:11

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

  9. 03:31

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

  10. 04:01

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

  11. 04:29

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

  12. 04:46

    קיבלנו מוצר ומה שאנחנו עושים זה כזה דבר. אנחנו רוצים, בואו ניפטר קודם כל מכל זה. יש לנו פה את ה-promise, נעשה copy paste ו-db collection products. אנחנו הולכים לפונקציה שנקראת insert one.

  13. 05:12

    פונקציה מקבלת את המוצר ומקבלת את כל הפונקציה הזאת, error ו-info. הוא בייקט שאומר מה בעצם התרחש בסיפור הזה.

  14. 05:31

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

  15. 05:52

    ואם הכל בסדר בואו רק נדפיס console.log של info.

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

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

ההרצאה הבאה: עדכון מלא של מוצר ב-MongoDB

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

  • מבוא ל-MongoDB
  • הוספת דומיין חדש - ל-AZURE
  • יצירת פרויקט חדש - לעבודה עם MongoDB
  • הוספת נתון חדש למסד נתונים

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

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