
_id. כדי לא להתבלבל, משתמשים בשם הזה בכל מקום: במודל, בקונטרולר ובפונקציות ה-logic (בעזרת בחירה מרובה ב-Ctrl+D, בזהירות כדי לא לשנות מקומות לא קשורים)._id הוא מחרוזת, לא number, ולכן מוחקים את validateRouteId ואת ה-schema שלו, והסוג ב-Joi משתנה ל-string.getOneProductAsync: הקוד דומה לשליפת כל המוצרים, אבל משתמשים ב-findOne עם אובייקט שמציין איזה מזהה לחפש.mongodb.ObjectID(...), שמחזיר אובייקט בינארי להשוואה.ObjectID (I גדולה, D גדולה). ה-IntelliSense מציע שם אחר ולכן מקבלים Not Found.+ שהמיר את המחרוזת למספר ויצר NaN. הסירו אותו גם בשאר המקומות.הטקסט המלא של הדקות הראשונות בהרצאה «שליפת מוצר בודד מתוך MongoDB» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו רוצים עכשיו לטפל במוצר אחד. אז יש לנו פה את הפונקציה ב-products logic שמקבלת קוד של מוצר ואמורה להחזיר את המוצר האחד והיחיד אבל אם אנחנו נזכר נראה שה-id של מוצר זה לא השם id בואו נסתכל רגע בפוסטמן זה underline ID, קו תחתון ID. למה?
כי זה מה שראינו שמונגו DB מבצעת כל פעם שאנחנו מוסיפים דוקיומנט חדש. היא באה ואומרת ה-ID שהיא נותנת לכם זה underline ID. יכלנו להגיד לה לא, תני לנו ID כ-ID, אבל השארנו את זה כדפולט בכדי שזה בעצם המוסכמה היותר נפוצה לשימוש במונגו DB.
זה אומר שאנחנו רוצים להיות תואמים במה שיש בדאטאבייס. כי אם בחלק מהמקומות יהיה לנו ID ובחלק מהמקומות אנחנו נכתוב underline ID, זה יגרום לאיזשהו בלבול.
כי לפעמים אנחנו נטעה אולי ובמקום underline נכתוב בלי ולפעמים אם כשלא צריך. לכן אני אומר בואו נקרא ל-ID בכל מקום מעכשיו והלאה underline ID.
לפני שאנחנו מגיעים לפה יש לנו עוד כל מיני מקומות שבהם אנחנו צריכים לעבור ולשנות את השם ID ל-underline ID לדוגמה במודל.
בואו נסמן ID ונבצע את הטריק עם ה-Ctrl-D. אתם רואים שהוא מסמן לי מספר חבר'ה כאלה? וניתן להם underline ID. זה מקום אחד לדוגמה שאנחנו צריכים. בואו נראה איפה עוד אנחנו צריכים לשנות כאן.
הנה יש לנו כאן כל מיני חבר'ה כאלה, בואו נסמן את זה. טוב, האמת שהוא מסמן לי דברים קצת שאני לא רוצה שהוא יסמן, אז אני פשוט אעבור אחד אחד, ובואו נסתכל רגע מה עוד אנחנו צריכים.
אני יורד פה למטה, הנה יש לנו כאן צורך בזה, ויש לנו כאן underline ID. איפה עוד שכחנו? או נראה לי ששכחתי פה עוד משהו. require name, name, name, זה ה-name, בסדר, נראה שהמודל שונה בהצלחה, מקסימום תהיה לנו איזושהי שגיאה וננסה לטפל בה.
הדבר הבא זה הקונטרולר, בקונטרולר יש המון מקומות שבהם כתוב ID, אנחנו רואים את זה פה. אז כאן אנחנו נמצאים בפונקציה get one product ואנחנו רוצים, להתחיל ולשנות את החבר'ה האלה.
אז יש לנו פה ids, כל id הופך להיות underline, הנה אנחנו רואים כאן, בואו נלך פה למטה, בפוסט אני לא רואה שיש לי, בפוט אני רואה שיש לי, כאן id נשנה ל-underline, id, patch אותו סיפור, פשוט פעם אחת אנחנו עוברים,
כי בנינו את זה לפני זה כ... כsql ואם אנחנו נמצאים כבר פה ב delete ושינינו אז אין לנו את הבדיקה הזאת שאנחנו רואים והאמת עכשיו שאני חושב על זה בואו נסתכל רגע על get one product כאן אנחנו מבצעים איזושהי ולידציה של ה-id לפי מה לפי מספר נכון ולידייט ראוט איי-די, או הנה זאת עוד בעיה שיכולה להיות, בואו נסתכל רגע על הוולידייט
ראוט איי-די ויש לנו פה את הראוט איי-די ולידיישן סכמה שאומר שהאיי-די זה נאמבר, או יש גם פה, אני רואה שהאיי-די זה נאמבר, זה גם כן משהו שאנחנו צריכים לשנות.
טוב, אז בואו ניפטר רגע מראוט איי-די ולידיישן סכמה, קודם כל אין לנו צורך בזה, אין לנו צורך ב-Validate Route ID, ביי ביי.
טוב, יש לנו פה כל מיני שינויים בגלל שיש לנו את השינוי הזה עם ה-SQL ל-MongoDB. כאן נרשום סטרינג ונתחיל לעבור ולשנות את ה-IDs לסטרינגים, סטרינג וסטרינג, מפני שהוא לא מספר.
עוד משהו שאנחנו היינו צריכים זה פה כמובן ב-Get One Product, אין לי את הבדיקה הזאת. קיבלנו ID, הלכנו, הבאנו אותו. אם אין לי מוצר כזה אז אני מחזיר 404, גם אם הוא טעה במחרוזת של ה-ID.
ויש לנו כאן את ההחזרה של המוצר. אז עכשיו אנחנו יכולים לגשת ולבנות את get one product async. זאת נמצאת פה, get one product async, הנה היא לא מקבלת ID אלא underline ID, אפשר להיפטר מכל התוכן הזה ומה-async, אולי גם פה יש לנו כל מיני ID's אני רואה, אבל נטפל בהם בהמשך.
טוב, אז מה אנחנו רוצים לעשות? אנחנו רוצים לבצע משהו דומה למה שביצענו פה. אז אני כרגע אעשה copy, paste, כי זה מאוד מאוד דומה. הפונקציה הקודמת החזירה את כל המוצרים, יש לנו פה promise ויש לנו resolve וreject, אנחנו ניגשים לקולקשן של כל המוצרים, ובמקום find אנחנו אומרים לו find1.
מקבלת אובייקט שאומר איזה ID לחפש,