PracticU

Express Middleware

בלי כתוביותעם כתוביות
PracticU › קורס NodeJS › Express Middleware
מילון מושגים:
Middleware - שכבת תוכנה שמתווכת בין רכיבים ומטפלת בבקשות בדרכן, למשל לאימות, רישום לוג או עיבוד נתונים.
בקשה - פנייה שלקוח שולח לשרת כדי לקבל מידע או לבצע פעולה. השרת מחזיר עליה תגובה.
נתיב - מחרוזת שמתארת את מיקומו של קובץ או תיקייה במערכת הקבצים, או כתובת של משאב בתוך אתר.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.
תגובה - המידע שהשרת מחזיר ללקוח בתשובה לבקשה, הכולל בדרך כלל נתונים וקוד סטטוס.
URL - הכתובת שמזהה משאב באינטרנט, למשל דף אתר, וכוללת פרוטוקול, שם מארח ונתיב.
ראוט - הגדרה שמקשרת כתובת בקשה לקוד שמטפל בה באפליקציה. גם מסלול שדרכו עוברות חבילות ברשת.
GET - שיטת HTTP לבקשת מידע מהשרת בלי לשנות אותו. הפרמטרים מועברים בדרך כלל בכתובת.

Express Middleware
הסרטון מסביר middleware באקספרס: פונקציה שרצה בין הבקשה לתשובה, לכל הבקשות או לנתיב מסוים בלבד.
מבנה הפונקציה
1. שלושה פרמטרים: request, response ו-next.
2. next: מעביר את הבקשה להמשך, לנתיב או ל-middleware הבא. בלי next הבקשה נתקעת, והדפדפן לא מקבל תשובה.
3. סיום הבקשה: middleware יכול גם לענות בעצמו עם response.send. אז הנתיב המקורי לא מתבצע.
middleware לכל הבקשות
1. use: app.use(fn) רושם את הפונקציה לכל בקשה, בלי קשר לנתיב.
2. דוגמה: הפונקציה מציגה ב-console את ה-method ואת ה-url של הבקשה.
3. תוצאה: בלי next הדף לא נטען. עם next כל דף נטען, והמידע מוצג גם לבקשות נוספות כמו בקשת האייקון של הדפדפן.
middleware לנתיב אחד
1. פרמטר לראוט: app.get(path, middleware, handler). ה-middleware רץ רק לנתיב הזה.
2. דוגמה: displayCurrentTime מציג new Date().toLocaleTimeString() רק לדף הבסקטבול.
3. הגדרה פנימית: אפשר לכתוב את הפונקציה ישירות בתוך הקריאה לראוט. הדובר מציין שזה מסבך את הקוד, ולכן עדיף להפריד אותה לפונקציה נפרדת.
אחרי הסרטון אפשר להוסיף לוגיקה לבקשות, לכל הבקשות או לנתיב מסוים.

פרקי ההרצאה: Express Middleware

  1. 00:00

    מה זה Middleware ואיך הוא עובד

  2. 00:41

    בניית פונקציית Middleware ראשונה

  3. 01:55

    הרצת Middleware לפני כל הנתיבים

  4. 02:48

    למה חייבים לקרוא ל-next

  5. 03:48

    עצירת הבקשה ושליחת תשובה

  6. 06:30

    העברת הבקשה לנתיב המקורי עם next

  7. 08:04

    חובה לשלוח תשובה בכל נתיב

  8. 08:59

    Middleware שרץ רק לנתיב מסוים

תמלול ההרצאה: Express Middleware

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

  1. 00:02

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

  2. 00:18

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

  3. 00:32

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

  4. 00:48

    הדבר הראשון שאנחנו צריכים להבין זה ש-middleware בסופו של דבר זאת פונקציה אז אנחנו בונים function בוא נניח שאנחנו רוצים middleware כלומר פונקציה כזאת שמציגה את הדאטה של ה-request אז בואו נקרא לפונקציה display request data.

  5. 01:07

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

  6. 01:22

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

  7. 01:47

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

  8. 02:04

    אז איך אנחנו בעצם הולכים לעשות את זה? יש לנו פה פונקציה שאנחנו רוצים להציג את הפרמטרים המרכזיים ב-request, אז בואו נבצע console.log וניקח את פרמטר ה-request שקיבלנו, ונציג את ה-method שלו, כלומר מה בעצם גלשו, האם גלשו ב-get, האם גלשו

  9. 02:27

    ב-post וכו', ונציג בנוסף גם את ה-request url לאן בדיוק ביצעו את הגלישה, לאיזה נתיב. עכשיו, אם אני לא אבצע שימוש ב-next, ה-request בעצם לא ימשיך לנתיב האמיתי שלו וייתקע ובעצם הלקוח לא יקבל שום תשובה בחזרה.

  10. 02:51

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

  11. 03:03

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

  12. 03:23

    use זאת פונקציה שאומרת לנו תשמעו תביאו לי פונקציה שזאת החתימה שלה ריקווסט ריספונס ונקסט אני אקרא לה לפני שאני קורא לה ריקווסטים הרגילים לא משנה איזה ריקווסט זאת אומרת שזאת השיטה לגרום לווינדלוויר לרוץ לא משנה איזה נתיב מבקשים בואו קודם כל נראה מה קורה כרגע אם אני לא משתמש בפרמטר השלישי נקסט אנחנו רוצים להריץ את המערכת נוד אפ גו

  13. 03:54

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

  14. 04:24

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

  15. 04:41

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

  16. 05:03

    אני מריץ ואני רואה שכל פעם שאני מריץ אני מקבל כאן get ו-news. שימו לב שהדפדפן עצמו מבצע גם בקשה מהשרת למשהו שנקרא פאביקון. פאביקון זה האייקון הזה כאן למעלה.

  17. 05:19

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

  18. 05:29

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

  19. 05:50

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

  20. 06:05

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

  21. 06:24

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

  22. 06:42

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

  23. 07:02

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

  24. 07:23

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

  25. 07:48

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

  26. 08:09

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

  27. 08:29

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

  28. 08:44

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

  29. 09:03

    בואו נגיד שאנחנו רוצים to display current time. שוב פעם, בגלל שאנחנו middleware, אלה שלושת הפרמטרים הארגומנטים שאנחנו צריכים לקבל.

  30. 09:16

    בואו ניקח כאן משתנה const d שווה new day ואנחנו רוצים to to console.log d.to-local-time-string. אין לנו צורך בזה. נקסט, אמרנו חובה, אחרת אנחנו פשוט ניתקע, והשאלה היא איך אנחנו באקספרס אומרים להריץ רק את הפונקציה הזאת, להריץ כלומר את הפונקציה הזאת, רק אם גולשים ל-route מסוים.

  31. 09:50

    עושים את זה כאן. שימו לב שיש לנו route, בואו ניקח את הראוט השני וכמובן הנתיב שאנחנו גולשים אליו הכוונה ואם גולשים ל-/news-sports-basketball-html אנחנו רוצים להריץ את display-current-time בדיוק פה.

  32. 10:12

    עכשיו אם אנחנו נריץ, שימו לב אנחנו ממתינים

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

ההרצאה הקודמת: Express Package

ההרצאה הבאה: הסבר על Web Service

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

  • רידקס - יצירת Middleware
  • הבנה של Middleware - Filters

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

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