
Request failed with status code 401 לא אומרות דבר למשתמש. ההרצאה מראה איך להבין סטטוס קודים של השרת ולכתוב פונקציה שמחלצת הודעת שגיאה ברורה מכל סוג של חריגה.catch, אפילו מחרוזת, ולכן צריך לחלץ את ההודעה בצורה גמישה.getErrorMessageNotify שמקבלת אובייקט err מסוג any ומחזירה את ההודעה. אחר כך קוראים לה בתוך error ושולחים את התוצאה.typeof err הוא מחרוזת, מחזירים אותה. כך קורה כשהפרונט עצמו זרק הודעה עם throw.err.response.status ומחזירים הודעה משלנו: Incorrect credentials ל-401, You don't have permission ל-403, Invalid data ל-400, Route not found ל-404 והודעה על שגיאת שרת ל-500. הודעות כאלה נחוצות גם מטעמי אבטחה, כי שרתים לפעמים לא חושפים את הסיבה.err.response.data מחרוזת, מחזירים אותה. אם הוא מערך, כמו בבעיות ולידציה, מחזירים את התא הראשון. כך התקבל Price must be minimum 0 כשנשלח מחיר שלילי, והודעה על שם משתמש או סיסמה שגויים בכניסה.err.message: חייבים לבדוק אותו אחרי כל הבדיקות של Axios, כי גם לאובייקט של Axios יש message, והוא היה נתפס קודם.Some error, please try again.הטקסט המלא של הדקות הראשונות בהרצאה «הודעות שגיאה בריאקט» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הדבר האחרון שנשאר לנו לבצע זה באמת לטפל בהודעות השגיאה הלא ברורות האלה שמוצגות לנו. שימו לב, יש לנו פה request fail with status code 401. מה בדיוק היוזר אמור להבין מההודעה הזאת?
קודם כל, למה זה מציג את ההודעה הזאת? בואו נסתכל רגע על הקוד. מה שקרה זה אנחנו ביצענו request לשרת. השרת מחזיר לנו שגיאות מסוימות. יש כמה סוגי שגיאות שהשרת יכול להחזיר.
השרת יכול להחזיר מה שנקרא שגיאות 400 4XX כשהיא אומרת שמתחילות ב-4. זה יכול להיות 401 ויכול להיות 403 ויכול להיות 404 ויכול להיות 400. בואו נבין מה זה כל אחד מהם.
400 זה שגיאת ולידציה. זה אומר ששלחנו לו request שמכיל נתונים שהם לא חוקיים מבחינתו, לדוגמה שם משתמש קצר מדי. אתם יכולים להגיד, רגע, אבל אתה בודק את זה בפרונט.
זה נכון, אבל ה-Back-End לא יודע אם אני בודק או לא בודק, הוא תמיד תמיד עושה ולידציה בעצמו. שגיאת 404, אנחנו כבר יודעים מה זה, גלשנו לאיזה ראוט שבכלל השרת לא מכיר.
401, זה אומר שאנחנו מנסים לבצע פעולה שאין לנו הרשאות לגביה, או שאנחנו מנסים לבצע לוגדין עם הרשאות לא נכונות, אבל השרת לא יודע מי אנחנו.
לדוגמה, אם אני מבצע לוגדין עם קרדנשלס לא נכונים, השרת לא יודע מי אני אז הוא מחזיר לי 401. 403 זה מאוד מאוד דומה זה מצב שבו השרת כן יודע מי אני אני כן עשיתי לוגין בהצלחה אבל עדיין אני מנסה לבצע איזושהי פעולה שמבחינתו זה אסור נניח אני מנסה לבצע איזה פעולה של אדמיניסטרטור ואני לא אדמיניסטרטור אז הוא יחזיר לי 403.
סוג אחר של הודעות שהשרת יכול להחזיר לנו זה הודעות 500. 5X הודעות שמתחילות ב-500 ההודעה הכי נפוצה זה 500 זה פשוט קריסה בשרת שרת קרס מאיזושהי סיבה זה לא משהו שאמור לקרות וזה לא בסדר אם שרת קורס מבחינת ה-Backend אבל אם זה קרה אז הוא מחזיר 500 ולא 400.
400 זה אומר ה-Front End עשה משהו לא בסדר לדוגמה ולידציה לדוגמה ניסה לגלוש למקום שלא קיים או ניסה להיכנס בלי קרדנשיאל נכונים ו-500 זה אומר שהשרת קרה לו משהו לא בסדר.
אורייט אז קודם כל יש את הסטטוס קודס האלה עכשיו ברגע שהגיע סטטוס קוד שהוא או 400 או 500 כלשהו, אקשס זורקת לנו חריגה ועוטפת את מה שהשרט נתן לה, את ההודעה שהשרט נתן, אקשס בעצמה עוטפת באיזשהו אובייקט וזורקת אותו פה ל-catch.
לכן כשאנחנו באים ל-ERR-Message אנחנו בעצם מקבלים את מה שאקשס נתן לנו ולא מה שהשרט נתן לנו. אין עד היום שום מוסכמה ברורה איך בדיוק אמורים לשלוח הודעות מהבק אנד לפורנט אנד על ידי אקשס, בלי אקשס, בצורה כזאת שאנחנו נקבל תמיד אובייקט ידוע וברור לתוך קאצ' ונוכל
לדעת בול מהי ההודעה הכי נכונה. לדוגמה, שפת C-Sharp יש לה בול ספציפיקציות איך נכון לשלוח אובייקט אקספשן. בגלל שאין שום הוסכמה ואם מתרחשת חריגה בפרונט היא יכולה לשלוח לכאן כל מיני דברים, היא יכולה אפילו לשלוח לכאן מחרוזת ואז בכלל לא יהיה לי מסג' אם ERR הוא מסוג מחרוזת או אם access שולחת לנו איזושהי חריגה יש לה את האובייקט משלה
או אם השרת שולח לי הוא יכול לשלוח לי כל מיני דברים שונים בגלל שאין שום הוסכמה כזאת אנחנו צריכים עכשיו לעבוד טיפה בפרונט בכדי להצליח לחלץ את ההודעה, לא משנה איך היא תישלח.
את זה אפשר לעשות באיזשהו סרוויס נפרד. לצורך הפשטות בואו נעשה את זה בתוך ה-Notify. ומה שאנחנו יכולים לעשות זה פשוט לבנות פה איזשהו private get error message.
תן לי איזשהו אובייקט error והוא יכול להיות כל דבר ואני אחלץ ממנו את הסטרינג של ההודעה האמיתית ויחזיר את ההודעה האמיתית.
זה בעצם פונקציה, עוד לא קראנו לה ובואו נראה מה אנחנו רוצים לעשות. אנחנו רוצים עכשיו לבצע סדרת בדיקות. בגלל שאין עדיין נכון להיום מוסכמה של בול איפה הודעת השגיאה חייבת להיות אנחנו צריכים עכשיו לבדוק ולבדוק ולבדוק.
אם סוג טייפ אוף של האותו אובייקט ארור הוא סטרינג, זאת הודעת השגיאה return ירה לא הגיוני שיש לי הודעה אחרת שלחו לי סטרינג איך זה יכול להיות שמישהו שולח לי לתוך הcatch סטרינג אם לדוגמה אפילו בפרונט באיזושהי פעולה בפרונט מישהו עשה throw ושם error message אם הוא עשה את הדבר הזה אז הוא שלח בעצם בthrow סטרינג
ואנחנו מקבלים את זה לכאן ונחזיר בדיוק את אותה הודעה אז זה הדבר הראשון שהייתי בודק הדבר הבא שהייתי בודק זה הודעות שאקשס יכולה לשלוח.
קודם כל כאן אנחנו צריכים לשאול את עצמנו האם השרת מעביר הודעות מדויקות או לא. בוא נניח שהוא לא מעביר הודעות מבחינת טקסט מדויק. אם השרת לא מביא הודעות מדויקות מה שהייתי מבצע זה בוא נבדוק אם יש לERR ריספונס כי שימו לב שאקשס עובדת בצורה כזאת האמת לא רואים את זה פה רואים את זה ב-out
service כאשר אנחנו עובדים עם access היא מקבלת רספונס ולרספונס יש data ויש לו גם סטטוס וזה אותו קוד 400, 401, 403, 500 זה הסטטוס code אז אם יש לנו רספונס והוא לא null או undefined ויש לו סטטוס והסטטוס שווה לבוא נניח 401. אז אנחנו יכולים להחליט איזה הודעה לתת ליוזר אם ה-Backend
שלח לי סטטוס 401. לדוגמה please login לא please login זה לא הודעה נכונה בוא נגיד incorrect credentials נניח שזאת ההודעה שאני מחליט כמובן בשפה שאני רוצה לכתוב אותה ובואו נניח שבשלב הזה נבדוק עוד דבר אחד כמובן שפה אנחנו רוצים לבצע עוד ועוד הודעות בדיקה בוא נגיד שאנחנו בודקים 403 403 שיהיה you don't
have permission בוא נגיד שאנחנו בודקים גם את 400 400 זה אומר invalid data זה הוולידציה שאנחנו לא אמורים לקבל את זה אנחנו אמורים לבדוק את זה עם ולידציות אבל just in case 404 אם מאיזושהי סיבה גלשנו ויש איזושהי טעות בראוט אז ראוט נוט פאונד למרות שאמור לקפוץ אותו פייג' 404 אבל לא יודע למה ראוט יכול להיות לא בסדר מבחינת
הפיתוח אז אנחנו מקבלים את זה. מה עוד ראינו ב-400ים? רק שלוש ארבע ארבע מאות ובוא נניח חמש מאות סרבר נניח.
אחרי שבדקנו את כל אלה אנחנו יכולים לבצע עוד בדיקה אחת, הבדיקה הזאת חייבת להיות אחרי כל הבדיקות האלה.
טייפ אוף ERR מסג' זה סטרינג. למה את הבדיקה הזאת אני עושה אחרי הכל? כי גם אקשס יש באובייקט שלה מסג'.