PracticU

הוספת ולידטור ב-Mongoose

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

הוספת ולידטור ב-Mongoose
בניגוד ל-Joi, שבו הוולידציה נעשית בספרייה חיצונית, ב-Mongoose הכללים מוגדרים ישירות על כל מאפיין בסכמה של המודל. ההרצאה עוברת על ההגדרות הבסיסיות, על הודעות שגיאה מותאמות ועל וולידטור מותאם אישית.
השלבים העיקריים
1. הגדרת כללים בסכמה: מאפיין שהיה רק עם טיפוס הופך לאובייקט, ובו אפשר להוסיף required ו-minlength. כל כלל יכול לקבל מערך: הערך הנדרש ואחריו הודעת שגיאה משלנו.
2. הפעלת הוולידציה בקונטרולר: ב-POST קוראים ל-product.validate() עם await, ולא לגרסה הסינכרונית כדי לא לעכב את האפליקציה. אם התקבלה שגיאה, מחזירים סטטוס 400 עם הודעת השגיאה ועושים return.
3. שדות מספריים: ל-price מגדירים טיפוס מספר עם required, min שהוא 0 עם הודעה שהמחיר לא יכול להיות שלילי, ו-max עם הודעה מתאימה. אותו דבר ל-stock, עם גבולות משלו.
4. תוצאת הבדיקה: כשכמה כללים נופלים, כל ההודעות חוזרות יחד, למשל על שם חסר, מחיר שלילי ומלאי חורג.
5. וולידטור מותאם: במאפיין name מגדירים validate עם פונקציה שמקבלת את value. בדוגמה בודקים שהאות הראשונה היא אות לועזית גדולה, ואם לא, חוזרת ההודעה שהשם חייב להתחיל באות גדולה. מדובר בוולידטור שמשתמשים בו כשהכללים הסטנדרטיים לא מספיקים, והוא גם אפשרות שלא הייתה ב-Joi.
6. אותה וולידציה ב-PUT: ממקמים את אותה בדיקה גם ב-PUT, והיא מחזירה את אותן שגיאות על שם, מחיר ומלאי.
שימו לב
- Mongoose מוסיף לתחילת ההודעה את שם השדה, למשל name:, ולכן כדאי לנסח את ההודעות בהתאם, למשל is missing ו-must be minimum 3 chars.
- ב-PATCH הוולידציה כפי שהוגדרה לא תעבוד, כי היא כוללת required ואילו ב-PATCH לא חייבים לשלוח את כל השדות. המרצה השאיר את הפתרון לתלמידים.
- את בדיקת האות הגדולה אפשר לעשות גם עם regex, אבל המרצה לא הניח שהתלמידים מכירים אותו.
היתרון הוא שהוולידציה מובנית ב-Mongoose, ואין צורך בספרייה חיצונית כמו Joi. בסוף ההרצאה מסוכם נושא MongoDB כולו: מסד NoSQL, RESTful service עם הדרייבר הישיר, ואותו שירות עם Mongoose.

פרקי ההרצאה: הוספת ולידטור ב-Mongoose

  1. 00:00

    ולידציה ברמת הסכמה במקום Joi

  2. 00:41

    הגדרת required והודעת שגיאה

  3. 01:25

    אורך מינימלי עם minlength

  4. 01:57

    הפעלת validate בקונטרולר

  5. 03:02

    בדיקת הוולידציה ב-Postman

  6. 04:00

    התאמת נוסח הודעות השגיאה

  7. 04:38

    ולידציות למחיר ולמלאי

  8. 06:24

    בדיקת כל הוולידציות יחד

תמלול ההרצאה: הוספת ולידטור ב-Mongoose

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

  1. 00:03

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

  2. 00:18

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

  3. 00:36

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

  4. 00:50

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

  5. 01:21

    אז בואו ניתן את ההודעה name על איזה מיסינג. תכף אנחנו נראה שההודעה הזאת היא לא כזאת טובה ואנחנו נצטרך טיפה לשנות אותה. בואו ניתן כאן עוד הגדרה מין length מערך 3 ו-name must be מינימום ריצ'רס, אוקיי?

  6. 01:59

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

  7. 02:12

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

  8. 02:41

    אז נקרא לזה עם validate וה-wait בצורה כזאת ואז אם יש error אנחנו רוצים to הוא ריספונס טטוס 400 נקודה send error message ו-return. בואו נבדוק את זה בשלב הזה.

  9. 03:10

    נריץ, ניגש לפוסט. יש לנו את אותו אפל שהוספנו. נגדיר שהאפל הוא רק ABC ושהמחיר, בעצם היה לנו רק name. הוא required והוא חייב להיות מינימום שלושה תווים.

  10. 03:33

    האמת שזה יעבור ולידציה. בואו נגדיר AB. send וproduct validation failed name.name name must be minimum free charge אז אנחנו רואים שמונגוס סליחה מונגוס טיפה מתערבת לנו בשם בהודעת שגיאה ואומרת name.name ואז name must be minimum free charge שזה ההודעה שלנו אנחנו יכולים להשאיר את זה ככה או שאנחנו יכולים טיפה לשנות את ההודעת ולידציה ולהגדיר is missing

  11. 04:09

    אז בואו נגדיר פה must be minimum 3 chars ואז אם אנחנו מריצים את זה כך אנחנו כאילו משתמשים טיפה בהגדרה של של מונגוס ואנחנו רואים name must be minimum 3 chars קצת אולי יותר אלגנטי אבל החלטה שלכם בואו ניפטר לגמרי מה name ונראה מה אומר name is missing אז אנחנו יכולים להשב את זה ככה או כל הודעה שאנחנו רוצים בואו

  12. 04:39

    נשלים רק את הוולידציות הנוספות. אז היה לנו את הוולידציות לגבי ה-Name ואנחנו רוצים את הוולידציות לגבי ה-Price. אז בואו נהפוך את זה ל-Type Number, נרד פה שורה, עושים פה פסיק, נגיד לו גם כאן Required True, ניתן לו ערך מינימום 0 can't be negative כי הוא ייתן

  13. 05:15

    לנו פרייס נקודותיים ואז נגיד can't be negative ונשכפל את זה למאקס והמאקס שלנו פעם היה אלף אם אני זוכר נכון. can't exceed 1000 בסדר כאן היה לנו בעבר max length הוא היה 100 אם אני זוכר must בי מקסימום 100 צ'ארס, מקס לנגד, פה חסר לי פסיק.

  14. 05:59

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

  15. 06:35

    אין לי name, יש לי מינוס, וזה בכלל מיליון, או סליחה, 100,000. זה send, והוא אומר לנו name is missing price, can't be negative stock, can't exceed 10,000.

  16. 06:49

    אנחנו רואים שהוא עובד יפה ואומר לנו, הנה כל הוולידציות שנפלו, תעשו עם זה מה שאתם רוצים. בואו ננסה עכשיו להכניס Apple שלוש וחצי שעולה 100, והוולידציה עברה בהצלחה, הכל בסדר.

  17. 07:07

    יש לנו עוד אפשרות שלא הייתה לנו בגרסת ג'ויין,

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

ההרצאה הקודמת: שליפת קטגוריה עם כל המוצרים שלה ב-Mongoose

ההרצאה הבאה: בניית אתר אינטרנט ב-NodeJS

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

  • הוספת VMkernel
  • הוספת Request לטסט
  • הוספת Maven Dependencies
  • הוספת אינדקס ב-SQL

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

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