PracticU

יצירת סל קניות בחנות אונליין ב-NodeJS

בלי כתוביותעם כתוביות
PracticU › קורס NodeJS › יצירת סל קניות בחנות אונליין ב-NodeJS
מילון מושגים:
עוגייה - קובץ קטן שאתר שומר בדפדפן כדי לזכור מידע על המשתמש בין בקשות, למשל מצב התחברות או העדפות.
Northwind - מסד נתונים לדוגמה של מיקרוסופט, המדמה חברת מסחר ומשמש ללימוד ולהדגמת שאילתות SQL.
Postman - כלי לבדיקת API: שליחת בקשות HTTP לשרת ובחינת התגובות, נפוץ בפיתוח ובבדיקות.
PUT - שיטת HTTP לשליחת נתונים לשרת כדי ליצור או להחליף משאב קיים במלואו.
ראוט - הגדרה שמקשרת כתובת בקשה לקוד שמטפל בה באפליקציה. גם מסלול שדרכו עוברות חבילות ברשת.
GET - שיטת HTTP לבקשת מידע מהשרת בלי לשנות אותו. הפרמטרים מועברים בדרך כלל בכתובת.
jQuery - ספריית JavaScript ותיקה שמפשטת את הגישה לרכיבי הדף, אירועים ואנימציות בדפדפן.
AJAX - טכניקה שמאפשרת לדף אינטרנט לשלוח ולקבל נתונים מהשרת ברקע ולעדכן את התצוגה בלי לטעון מחדש.

יצירת סל קניות בחנות אונליין ב-NodeJS
בהרצאה בונים עגלת קניות לחנות אונליין כשהעגלה נשמרת ב-session בצד השרת ולא ב-cookie בלקוח. כך השרת יודע מה כל משתמש בחר, ואפשר לשמור את זה בהמשך במסד נתונים כשהוא מבצע checkout.
השלבים העיקריים
1. האתר הקיים: דף עם מוצרים של Northwind, למשל Chai ו-Chang, ו-Express עם express-session מוגדר. הרשימה נטענת מקובץ JSON ללא מסד נתונים. בשרת יש שלושה ראוטים: הוספה לעגלה, הסרה מהעגלה ו-checkout.
2. הוספה לעגלה: מאתרים את המוצר ב-products.find לפי ה-id מהבקשה. אם אין מוצר כזה, מחזירים 404. אם request.session.cart עדיין לא קיים, יוצרים אותו כמערך ריק, ואז מוסיפים את המוצר.
3. הסרה מהעגלה: אם אין עגלה, מחזירים 400 עם הודעה שהעגלה ריקה. אחרת מחפשים את האינדקס עם findIndex. אם הוא -1, מחזירים 400 שהמוצר לא בעגלה, ואחרת מסירים אותו עם splice.
4. Checkout: אם העגלה ריקה, מחזירים שגיאה, ואחרת מחזירים את העגלה כ-response.json.
5. בדיקה ב-Postman: ההוספה היא PUT ל-/api/addToCart/1 והסרה היא ראוט דומה. ה-checkout הוא GET. אחרי הוספת 1, 4 ו-2 והסרת 1, ה-checkout מחזיר רק 4 ו-2.
6. צד הלקוח: ב-jQuery נרשמים ללחיצה על התמונות בתוך #divProducts. ה-id של המוצר נקרא ממאפיין data-product-id.
7. הוספה והסרה בלחיצה: בלחיצה הראשונה נשלחת בקשת Ajax מסוג PUT, המאפיין data-bought נוסף לתמונה והמסגרת הופכת לכחולה, 5 פיקסלים. בלחיצה שנייה, כשהמאפיין כבר קיים, נשלחת בקשת הסרה, המאפיין מוסר והמסגרת חוזרת לשחור.
8. כפתור checkout: נותנים לכפתור id (buttonCheckout), ובלחיצה נשלחת בקשת GET ל-/api/checkout. בהצלחה בונים HTML של סיכום עם כותרת h4, רשימה ul של המוצרים (שם ומחיר בדולרים) וסכום כולל, ומציבים אותו ב-div של ה-checkout.
9. בדיקה: בוחרים מוצרים 1, 2 ו-5, מסירים את 2, ובלחיצה על checkout מתקבל סיכום של שני המוצרים שנשארו עם הסכום הכולל.
למה session ולא cookie
העגלה בשרת מאפשרת לאסוף סטטיסטיקות, לשמור אותה אחר כך במסד נתונים, ולעבוד גם אם המשתמש לא מאשר cookies עם מידע.
כך אפשר לבנות עגלת קניות נפרדת לכל משתמש על ידי session בשרת.
השיעור הבא בקורס: שימוש ב-Cache ב-NodeJS

פרקי ההרצאה: יצירת סל קניות בחנות אונליין ב-NodeJS

  1. 00:00

    אתר קניות עם עגלת קניות

  2. 01:19

    למה העגלה נשמרת ב-session בשרת

  3. 02:01

    התשתית והראוטים הקיימים בשרת

  4. 02:57

    איתור המוצר והחזרת 404

  5. 03:58

    הוספת מוצר לעגלה ב-session

  6. 04:58

    הסרת מוצר מהעגלה עם splice

  7. 07:36

    ביצוע checkout לעגלה

  8. 09:05

    בדיקת הוספה והסרה ב-Postman

תמלול ההרצאה: יצירת סל קניות בחנות אונליין ב-NodeJS

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

  1. 00:03

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

  2. 00:20

    בואו נסתכל רגע מה מוצג באתר הזה. אז יש לנו פה את הרצה node app go תן לנו את הדף עצמו. ומה שאנחנו רואים כאן זה אתר קניות כזה. Which products do you want to buy? יש לנו פה סדרה של מוצרים.

  3. 00:41

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

  4. 01:01

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

  5. 01:15

    צ'קאוט זה אומר שאנחנו רוצים לשלם ולראות את כל הסכום שיש עד עכשיו. אבל אני לא רוצה לשמור לו את העגלת קניות בקוקי בצד של ה-client side, אני רוצה לשמור את זה ב-session בצד של ה-server side כי אולי אני רוצה לארגן סטטיסטיקות אולי היוזר שנייה בעצם אני רוצה לדעת בסרבר מה הוא עשה ולשמור את זה בהמשך לדטאבייס ברגע שהוא עושה לי צ'ק אאוט אולי בעצם הוא לא ממש מאשר לי

  6. 01:47

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

  7. 02:08

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

  8. 02:28

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

  9. 02:55

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

  10. 03:20

    הוא שלח לי פה איידי מה המוצר שלו בואו נאתר את המוצר נלך לפרודקטס פיינד ונעשה פה איזה arrow function שמאתרת את זה יהיה request paramsid אם לא קיים לי מוצר כזה not product כי הוחזר לי undefined אז אני מחזיר 404 כי וואלה אין לי מוצר כזה עכשיו אנחנו פונים לפשן

  11. 03:58

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

  12. 04:19

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

  13. 04:50

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

  14. 05:09

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

  15. 05:39

    איך אתה יכול להסיר מוצר עם העגלה ריקה? לאחר מכן בואו נאתר את האינדקס של המוצר constIndexRequestSessionCartFindIndex ולתת לו arrow שמקבל את request params ID מהאזור הזה פה למעלה, ונראה אולי בעצם הוא לא נמצא כאן.

  16. 06:12

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

  17. 06:25

    רספונס סטטוס 400, כי זה bad request, ונתאר לו product isn't in the cart, המוצר בכלל לא בעגלה. כאן אנחנו צריכים האמת ריטרנים.

  18. 06:44

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

  19. 07:20

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

  20. 07:44

    אם הכל בסדר רספונס ג'ייסון ולתת לו request session cart. בואו קודם כל נבדוק את כל הסיפור הזה בעזרת פוסטמן. נפתח פה את פוסטמן, ניפטר מכל החבריה האלה, close all tabs, don't save, סגור לנו את הכל ואנחנו רוצים כרטיסייה חדשה.

  21. 08:21

    http localhost 3000 api add to cart/1 בואו רק נראה מה היה ה-rout עצמו אז ה-rout היה על put כי אנחנו משנים משהו put request גם זה וגם זה וה-checkout זה get כי אנחנו מקבלים מידע בחזרה בואו נשים את זה על put אין לנו פה body נבצע send ושכחתי להריץ את האתר, לא, לא שכחתי.

  22. 09:05

    בעצם יכול להיות שכן. בואו נריץ שוב פעם, good. אז הוא מחזיר לנו 200, בואו נסתכל מה כתוב, או נוריד את זה רגע, מה כתוב לנו כאן. אז אנחנו רואים שיש לנו את מוצר מספר 1, name chai, price 18, stock 39, עד כאן בסדר.

  23. 09:27

    בואו נשנה את זה למוצר 4, send, ויש לנו עכשיו גם את 1 וגם את 4, מעולה. בואו נבצע עוד אחד עם 2, ויש לנו את 1, 4 ו-2, עד כאן בסדר. בואו ניגש לפה, נשכפל את ה-rout וניתן לו remove from cart את 1, send.

  24. 10:08

    הוא get, טעות שלי, go, יופי. אז אנחנו רואים שיש לו עכשיו רק את ארבע ואת שתיים, זה המערך של ארבע ושתיים. ובואו נבצע צ'ק-אאוט.

  25. 10:23

    צ'ק-אאוט זה get request API צ'ק-אאוט go, והוא אמור לתת לנו כאן את כל הערכים עצמם. בואו רגע נוריד את זה. ויש לנו רק את ארבע ושתיים, הכל בסדר. זאת אומרת, צד השרת עכשיו מטפל כמו שצריך בעגלת קניות היא בצד של השרת אנחנו רוצים בצד של הלקוח לקרוא לה אז בואו ניגש ללקוח עצמו html כבר בנוי ניגש

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

ההרצאה הקודמת: ניהול סשן Session ב-NodeJS

ההרצאה הבאה: שימוש ב-Cache ב-NodeJS

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

  • איך ללמוד נכון בקורס אונליין
  • Media Player - לנגן אונליין
  • יצירת מפתחות הצפנה ב-AWS - פרויקט NodeJS

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

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