
required ו-minlength. כל כלל יכול לקבל מערך: הערך הנדרש ואחריו הודעת שגיאה משלנו.product.validate() עם await, ולא לגרסה הסינכרונית כדי לא לעכב את האפליקציה. אם התקבלה שגיאה, מחזירים סטטוס 400 עם הודעת השגיאה ועושים return.price מגדירים טיפוס מספר עם required, min שהוא 0 עם הודעה שהמחיר לא יכול להיות שלילי, ו-max עם הודעה מתאימה. אותו דבר ל-stock, עם גבולות משלו.name מגדירים validate עם פונקציה שמקבלת את value. בדוגמה בודקים שהאות הראשונה היא אות לועזית גדולה, ואם לא, חוזרת ההודעה שהשם חייב להתחיל באות גדולה. מדובר בוולידטור שמשתמשים בו כשהכללים הסטנדרטיים לא מספיקים, והוא גם אפשרות שלא הייתה ב-Joi.name:, ולכן כדאי לנסח את ההודעות בהתאם, למשל is missing ו-must be minimum 3 chars.required ואילו ב-PATCH לא חייבים לשלוח את כל השדות. המרצה השאיר את הפתרון לתלמידים.הטקסט המלא של הדקות הראשונות בהרצאה «הוספת ולידטור ב-Mongoose» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
נשאר לנו רק לטפל בוולידציה. ולידציה ראינו בעזרת ג'וי בעבר שאנחנו עושים אותה ברמת המודל. גם כאן את הוולידציה אנחנו עושים ברמת המודל.
איך? אנחנו פשוט צריכים להגדיר לכל מאפיין בסכמה שיש לה גם ולידציה, אם כמובן יש לה. אז אמרנו שה-Name הוא סטרינג, אחלה.
אבל אם אני שם אובייקט אני יכול להגיד שב-type, ראינו את זה. ואז, בואו נראית פה שורה, אנחנו יכולים לתת עוד דברים, לדוגמה ערכי ולידציה.
בואו נגיד שהניים הוא רקווייר, ואנחנו רוצים לתת לו true, אבל פה חסר לי פסיק. אם אנחנו רוצים גם לתת לו הודעה משלנו, אז אנחנו שמים פה מערך, הראשון זה הvalue, מה בעצם צריך להיות הערך שלו, והשני במערך זה איזושהי הודעה.
אז בואו ניתן את ההודעה name על איזה מיסינג. תכף אנחנו נראה שההודעה הזאת היא לא כזאת טובה ואנחנו נצטרך טיפה לשנות אותה. בואו ניתן כאן עוד הגדרה מין length מערך 3 ו-name must be מינימום ריצ'רס, אוקיי?
יש לנו כאן את ההגדרות לגבי name. בואו עכשיו נבדוק את זה. בעצם לפני שאנחנו בודקים את זה אנחנו צריכים להריץ את הוולידציה.
אנחנו הולכים לקונטרולר ואנחנו רוצים לגשת לפוסט. יצרנו כאן את האובייקט. בעבר בדיוק פה הייתה ולידציה של ג'וי. אז אנחנו רוצים קונסט ארור שווה ו-product.validate שימו לב שיש validate ו-validate-sink אנחנו לא רוצים לקרוא ל-sink בשביל לא לעכב את כל האפליקציה.
אז נקרא לזה עם validate וה-wait בצורה כזאת ואז אם יש error אנחנו רוצים to הוא ריספונס טטוס 400 נקודה send error message ו-return. בואו נבדוק את זה בשלב הזה.
נריץ, ניגש לפוסט. יש לנו את אותו אפל שהוספנו. נגדיר שהאפל הוא רק ABC ושהמחיר, בעצם היה לנו רק name. הוא required והוא חייב להיות מינימום שלושה תווים.
האמת שזה יעבור ולידציה. בואו נגדיר AB. send וproduct validation failed name.name name must be minimum free charge אז אנחנו רואים שמונגוס סליחה מונגוס טיפה מתערבת לנו בשם בהודעת שגיאה ואומרת name.name ואז name must be minimum free charge שזה ההודעה שלנו אנחנו יכולים להשאיר את זה ככה או שאנחנו יכולים טיפה לשנות את ההודעת ולידציה ולהגדיר is missing
אז בואו נגדיר פה must be minimum 3 chars ואז אם אנחנו מריצים את זה כך אנחנו כאילו משתמשים טיפה בהגדרה של של מונגוס ואנחנו רואים name must be minimum 3 chars קצת אולי יותר אלגנטי אבל החלטה שלכם בואו ניפטר לגמרי מה name ונראה מה אומר name is missing אז אנחנו יכולים להשב את זה ככה או כל הודעה שאנחנו רוצים בואו
נשלים רק את הוולידציות הנוספות. אז היה לנו את הוולידציות לגבי ה-Name ואנחנו רוצים את הוולידציות לגבי ה-Price. אז בואו נהפוך את זה ל-Type Number, נרד פה שורה, עושים פה פסיק, נגיד לו גם כאן Required True, ניתן לו ערך מינימום 0 can't be negative כי הוא ייתן
לנו פרייס נקודותיים ואז נגיד can't be negative ונשכפל את זה למאקס והמאקס שלנו פעם היה אלף אם אני זוכר נכון. can't exceed 1000 בסדר כאן היה לנו בעבר max length הוא היה 100 אם אני זוכר must בי מקסימום 100 צ'ארס, מקס לנגד, פה חסר לי פסיק.
בואו ניקח את כל זה, נשכפל לסטוק, סטוק היה 10,000, ונוסיף גם כאן איזה רקורה הרד אחד. אז הנה יש לנו כאן סדרה של ולידציות, בואו נבדוק את זה, פסיק, נריץ, ניגש לפוסטמן ונתחיל להגיד לו שיש לנו כל מיני דברים חסרים.
אין לי name, יש לי מינוס, וזה בכלל מיליון, או סליחה, 100,000. זה send, והוא אומר לנו name is missing price, can't be negative stock, can't exceed 10,000.
אנחנו רואים שהוא עובד יפה ואומר לנו, הנה כל הוולידציות שנפלו, תעשו עם זה מה שאתם רוצים. בואו ננסה עכשיו להכניס Apple שלוש וחצי שעולה 100, והוולידציה עברה בהצלחה, הכל בסדר.
יש לנו עוד אפשרות שלא הייתה לנו בגרסת ג'ויין,