PracticU

הודעות שגיאה בריאקט

בלי כתוביותעם כתוביות
PracticU › קורס ריאקט - React › הודעות שגיאה בריאקט
מילון מושגים:
בקשה - פנייה שלקוח שולח לשרת כדי לקבל מידע או לבצע פעולה. השרת מחזיר עליה תגובה.
קוד סטטוס - מספר שהשרת מחזיר בתגובת HTTP ומציין את תוצאת הבקשה, למשל 200 להצלחה או 404 לא נמצא.
חריגה - מצב שגיאה שמתרחש בזמן ריצת התוכנית ומפסיק את המהלך הרגיל, אלא אם הקוד תופס ומטפל בו.
תגובה - המידע שהשרת מחזיר ללקוח בתשובה לבקשה, הכולל בדרך כלל נתונים וקוד סטטוס.
ראוט - הגדרה שמקשרת כתובת בקשה לקוד שמטפל בה באפליקציה. גם מסלול שדרכו עוברות חבילות ברשת.
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).
שם משתמש - מזהה ייחודי שמשתמש מזין כדי להזדהות במערכת, לרוב יחד עם סיסמה.
תנאי - ביטוי לוגי בקוד שתוצאתו אמת או שקר, וקובע אילו פקודות יתבצעו בהתאם לערכו.

הודעות שגיאה בריאקט
הודעות כמו Request failed with status code 401 לא אומרות דבר למשתמש. ההרצאה מראה איך להבין סטטוס קודים של השרת ולכתוב פונקציה שמחלצת הודעת שגיאה ברורה מכל סוג של חריגה.
סטטוס קודים
1. 400: שגיאת ולידציה, הנתונים שנשלחו לא חוקיים. השרת תמיד בודק בעצמו, גם אם הפרונט כבר בדק.
2. 401: השרת לא יודע מי אתם, למשל login עם פרטים שגויים.
3. 403: השרת יודע מי אתם, אבל הפעולה אסורה, למשל פעולה של אדמין כשאינכם אדמין.
4. 404: כתובת שהשרת לא מכיר.
5. 500: קריסה בשרת. 4XX אומר שהבעיה בצד הלקוח, ו-5XX שהשרת נכשל.
כשמגיע קוד 4XX או 5XX, Axios זורקת חריגה ועוטפת את תשובת השרת באובייקט משלה. אין מוסכמה ברורה איזה אובייקט יגיע ל-catch, אפילו מחרוזת, ולכן צריך לחלץ את ההודעה בצורה גמישה.
פונקציית getErrorMessage
6. פונקציה פרטית ב-Notify שמקבלת אובייקט err מסוג any ומחזירה את ההודעה. אחר כך קוראים לה בתוך error ושולחים את התוצאה.
7. מחרוזת: אם typeof err הוא מחרוזת, מחזירים אותה. כך קורה כשהפרונט עצמו זרק הודעה עם throw.
8. שרת שלא שולח הודעות מדויקות: בודקים את err.response.status ומחזירים הודעה משלנו: Incorrect credentials ל-401, You don't have permission ל-403, Invalid data ל-400, Route not found ל-404 והודעה על שגיאת שרת ל-500. הודעות כאלה נחוצות גם מטעמי אבטחה, כי שרתים לפעמים לא חושפים את הסיבה.
9. שרת ששולח הודעות מדויקות: אם err.response.data מחרוזת, מחזירים אותה. אם הוא מערך, כמו בבעיות ולידציה, מחזירים את התא הראשון. כך התקבל Price must be minimum 0 כשנשלח מחיר שלילי, והודעה על שם משתמש או סיסמה שגויים בכניסה.
10. err.message: חייבים לבדוק אותו אחרי כל הבדיקות של Axios, כי גם לאובייקט של Axios יש message, והוא היה נתפס קודם.
11. ברירת מחדל: אם שום תנאי לא התקיים, מחזירים Some error, please try again.
שימו לב
- הקונסול מציג תמיד תשובות 400 ו-500, גם אם טיפלתם בהן, ואין סיבה להיבהל מכך.
- בבדיקה השרת הנוכחי שלח הודעות מדויקות. את בדיקות הסטטוס הכינו למקרה שהשרת לא עושה זאת.
עכשיו אפשר להציג למשתמש הודעת שגיאה ברורה בהודעה קופצת, במקום התראות עוצרות את התוכנית.

פרקי ההרצאה: הודעות שגיאה בריאקט

  1. 00:00

    טיפול בהודעות שגיאה לא ברורות

  2. 00:40

    משמעות קודי שגיאה 4XX

  3. 01:50

    קוד 403 ושגיאות 500

  4. 02:23

    אקסיוס עוטפת את החריגה

  5. 03:01

    היעדר מוסכמה לשליחת שגיאות

  6. 04:16

    בניית פונקציית חילוץ ההודעה

  7. 05:28

    בדיקת response וקוד הסטטוס

  8. 07:03

    הודעות מותאמות לפי הקוד

תמלול ההרצאה: הודעות שגיאה בריאקט

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

  1. 00:02

    הדבר האחרון שנשאר לנו לבצע זה באמת לטפל בהודעות השגיאה הלא ברורות האלה שמוצגות לנו. שימו לב, יש לנו פה request fail with status code 401. מה בדיוק היוזר אמור להבין מההודעה הזאת?

  2. 00:19

    קודם כל, למה זה מציג את ההודעה הזאת? בואו נסתכל רגע על הקוד. מה שקרה זה אנחנו ביצענו request לשרת. השרת מחזיר לנו שגיאות מסוימות. יש כמה סוגי שגיאות שהשרת יכול להחזיר.

  3. 00:36

    השרת יכול להחזיר מה שנקרא שגיאות 400 4XX כשהיא אומרת שמתחילות ב-4. זה יכול להיות 401 ויכול להיות 403 ויכול להיות 404 ויכול להיות 400. בואו נבין מה זה כל אחד מהם.

  4. 00:55

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

  5. 01:07

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

  6. 01:18

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

  7. 01:32

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

  8. 01:55

    סוג אחר של הודעות שהשרת יכול להחזיר לנו זה הודעות 500. 5X הודעות שמתחילות ב-500 ההודעה הכי נפוצה זה 500 זה פשוט קריסה בשרת שרת קרס מאיזושהי סיבה זה לא משהו שאמור לקרות וזה לא בסדר אם שרת קורס מבחינת ה-Backend אבל אם זה קרה אז הוא מחזיר 500 ולא 400.

  9. 02:15

    400 זה אומר ה-Front End עשה משהו לא בסדר לדוגמה ולידציה לדוגמה ניסה לגלוש למקום שלא קיים או ניסה להיכנס בלי קרדנשיאל נכונים ו-500 זה אומר שהשרת קרה לו משהו לא בסדר.

  10. 02:30

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

  11. 02:55

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

  12. 03:22

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

  13. 03:51

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

  14. 04:09

    את זה אפשר לעשות באיזשהו סרוויס נפרד. לצורך הפשטות בואו נעשה את זה בתוך ה-Notify. ומה שאנחנו יכולים לעשות זה פשוט לבנות פה איזשהו private get error message.

  15. 04:22

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

  16. 04:34

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

  17. 04:52

    אם סוג טייפ אוף של האותו אובייקט ארור הוא סטרינג, זאת הודעת השגיאה return ירה לא הגיוני שיש לי הודעה אחרת שלחו לי סטרינג איך זה יכול להיות שמישהו שולח לי לתוך הcatch סטרינג אם לדוגמה אפילו בפרונט באיזושהי פעולה בפרונט מישהו עשה throw ושם error message אם הוא עשה את הדבר הזה אז הוא שלח בעצם בthrow סטרינג

  18. 05:21

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

  19. 05:34

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

  20. 06:01

    service כאשר אנחנו עובדים עם access היא מקבלת רספונס ולרספונס יש data ויש לו גם סטטוס וזה אותו קוד 400, 401, 403, 500 זה הסטטוס code אז אם יש לנו רספונס והוא לא null או undefined ויש לו סטטוס והסטטוס שווה לבוא נניח 401. אז אנחנו יכולים להחליט איזה הודעה לתת ליוזר אם ה-Backend

  21. 06:38

    שלח לי סטטוס 401. לדוגמה please login לא please login זה לא הודעה נכונה בוא נגיד incorrect credentials נניח שזאת ההודעה שאני מחליט כמובן בשפה שאני רוצה לכתוב אותה ובואו נניח שבשלב הזה נבדוק עוד דבר אחד כמובן שפה אנחנו רוצים לבצע עוד ועוד הודעות בדיקה בוא נגיד שאנחנו בודקים 403 403 שיהיה you don't

  22. 07:08

    have permission בוא נגיד שאנחנו בודקים גם את 400 400 זה אומר invalid data זה הוולידציה שאנחנו לא אמורים לקבל את זה אנחנו אמורים לבדוק את זה עם ולידציות אבל just in case 404 אם מאיזושהי סיבה גלשנו ויש איזושהי טעות בראוט אז ראוט נוט פאונד למרות שאמור לקפוץ אותו פייג' 404 אבל לא יודע למה ראוט יכול להיות לא בסדר מבחינת

  23. 07:39

    הפיתוח אז אנחנו מקבלים את זה. מה עוד ראינו ב-400ים? רק שלוש ארבע ארבע מאות ובוא נניח חמש מאות סרבר נניח.

  24. 07:53

    אחרי שבדקנו את כל אלה אנחנו יכולים לבצע עוד בדיקה אחת, הבדיקה הזאת חייבת להיות אחרי כל הבדיקות האלה.

  25. 08:02

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

לקורס המלא: קורס ריאקט אונליין

ההרצאה הקודמת: התראות והודעות שגיאה בריאקט - React Notifications

ההרצאה הבאה: ריאקט - העלאת אתר לענן - Firebase - חלק 1

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

  • התאמה אישית של הודעות שגיאה
  • הוצאת הודעות השגיאה - מתוך ModelState

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

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