PracticU

הוספת מוצר חדש

בלי כתוביותעם כתוביות
PracticU › קורס NodeJS › הוספת מוצר חדש
מילון מושגים:
GET - שיטת HTTP לבקשת מידע מהשרת בלי לשנות אותו. הפרמטרים מועברים בדרך כלל בכתובת.
POST - שיטת HTTP לשליחת נתונים לשרת כדי ליצור או לעדכן משאב, למשל שליחת טופס.
ראוט - הגדרה שמקשרת כתובת בקשה לקוד שמטפל בה באפליקציה. גם מסלול שדרכו עוברות חבילות ברשת.
אסינכרוני - אופן פעולה שבו פעולה ארוכה רצה ברקע והתוכנית ממשיכה בלי להמתין לה, ומטופלת כשתסתיים.
REST - סגנון לבניית ממשקי API מעל HTTP, המבוסס על משאבים ועל שיטות סטנדרטיות כמו GET ו-POST.
CSS - שפת עיצוב שקובעת את המראה של דפי אינטרנט: צבעים, גופנים, מיקום וסידור הרכיבים.
גופן - העיצוב הגרפי של האותיות והתווים המוצגים בטקסט, הכולל צורה, סגנון וגודל.
npm - מנהל החבילות של Node.js, המשמש להתקנה ולניהול ספריות JavaScript בפרויקט.

הוספת מוצר חדש
הוספת מוצר חדש בגישת templating engine דורשת שני ראוטים: GET שמציג טופס, ו-POST שמקבל את הנתונים ושומר אותם. ההרצאה בונה את שניהם, כולל העלאת תמונה ו-redirect בסיום.
השלבים העיקריים
1. קישור ליצירה: בדף הרשימה מוסיפים קישור "create new product" עם href ל-/products/create, ובעיצוב ממקמים אותו בצד עם position: absolute (למשל top 150 ו-right 20).
2. ראוט GET: בקונטרולר מוסיפים router.get לנתיב /create בלי async, שמבצע רק render ל-products/create. הוא מחזיר דף למילוי פרטים, ולא מוסיף כלום. זה לא שירות restful, ולכן יש ראוט אחד לתצוגת הטופס ואחר לשליחתו.
3. הטופס: משכפלים את details.ejs ל-create.ejs ובונים form עם method="post" ו-enctype="multipart/form-data" כדי לתמוך בתמונה. בפנים: input מסוג text לשם, number למחיר עם step שמאפשר ערכים עשרוניים, number למלאי, input מסוג file בשם image עם accept ל-jpeg, וכפתור submit שכתוב עליו add. לכל input חייב להיות name, אחרת הוא לא נשלח.
4. עיצוב: ב-CSS מגדילים את הגופן ל-inputs ולכפתורים וקובעים רוחב של 300 פיקסלים.
5. התקנות: מריצים npm i עבור express-fileupload ו-body-parser. ב-app.js מבצעים require לשניהם, ואז server.use(fileUpload()) ו-server.use(bodyParser.urlencoded({ extended: true })). כך אקספרס קולטת קבצים ונתוני טופס, שאינם JSON.
6. ראוט POST: router.post לנתיב /create, אסינכרוני, עם try/catch. יוצרים מוצר משדות request.body (name, price, stock), ומוסיפים אותו למסד הנתונים עם await ל-addProductAsync.
7. שמירת התמונה: אם יש request.files, לוקחים את הקובץ בשם image, מחשבים את הסיומת מ-lastIndexOf של נקודה, ושומרים עם file.mv לתיקיית assets/images/products בשם added-product.id ואחריו הסיומת.
8. redirect: בסיום מבצעים response.redirect לרשימת המוצרים. זה מחזיר ללקוח סטטוס 3xx ומורה לו לגלוש למקום אחר.
9. בדיקה: מוסיפים אפל ובננה עם תמונות, מופנים לרשימה, רואים אותם בטבלה ובדף הפרטים, ומוצאים את קבצי התמונה לפי ה-ID שלהם.
שימו לב
הנתיב create יחסי לקונטרולר, ולכן הכתובת המלאה היא /products/create. שם התמונה נקבע מקוד המוצר. אם נותנים שמות UUID, שם התמונה יישמר במסד הנתונים ולא ייגזר מה-ID.
בסיום אפשר להוסיף מוצר חדש עם תמונה דרך טופס HTML, ולהגיע לתוצאה ברשימת המוצרים.
השיעור הבא בקורס: טיפול בשגיאות צד לקוח

פרקי ההרצאה: הוספת מוצר חדש

  1. 00:00

    לינק ליצירת מוצר חדש

  2. 01:38

    ראוט get לדף ההוספה

  3. 02:39

    שני ראוטים לדף ולשליחה

  4. 03:55

    view חדש להוספת מוצר

  5. 05:11

    טופס עם method post

  6. 06:11

    multipart ושדות שם, מחיר ומלאי

  7. 07:31

    שדה תמונה עם accept

  8. 08:31

    עיצוב הטופס ב-CSS

תמלול ההרצאה: הוספת מוצר חדש

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

  1. 00:04

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

  2. 00:38

    create new product לינק ובואו ניתן לו href שמאפשר לגלוש ל/products/create שעדיין כמובן אין לנו שום דבר בלינק הזה בואו ניקח את הקלאס נשים ונגדיר לו שהפוזישן שלו הוא אבסולוט top 150 וה-right נניח.

  3. 01:19

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

  4. 01:39

    אז אנחנו כמובן מופנים לפייג' 404. בואו נבנה ראוט כזה. אז אנחנו חוזרים בחזרה ואנחנו רוצים לגשת לקונטרולר שלנו. בקונטרולר אנחנו רוצים לבנות ראוט שמאפשר to get something.

  5. 01:58

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

  6. 02:36

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

  7. 02:50

    למה קריאייט? כי כל הראוטים שנמצאים פה בפרודקטס קונטרולר, השמות הם יחסיים לזה. אז זה בדיוק מתאים ל-/products/create.

  8. 03:07

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

  9. 03:28

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

  10. 03:51

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

  11. 04:11

    כאן בעצם אנחנו רוצים ליצור לעצמנו view שמאפשר להוסיף מוצר חדש. בואו נמחק את זה ונרשום add עכשיו אנחנו יכולים לקלוט את המידע ולהוסיף אותו ב-Ajax על ידי Javascript או משהו כזה או אנחנו יכולים לבנות פורם בכדי שלא יהיה לנו הרבה קוד בקליינט כרגע כ-Javascript Client Side בואו נבנה את זה כפורם ונשלח את המידע בצורה כזאת משהו שעדיין לא יצאנו לעשות

  12. 04:50

    כאמור כל הקורס הזה הוא Server Site Node.js אבל בגלל שאנחנו מתעסקים כרגע עם E.J.S אז אנחנו חשוב שנראה גם את החלק של ה-HTML. מיותר לציין שאם יש לכם איזשהו חוסר ב-HTML כמובן לפני כל הסרטונים האלה של ה-IJS חשוב לעשות איזה review ולהשלים טיפה את ה-HTML אבל אני מניח שאתם כבר שוחים ב-HTML אם אתם כבר בסרטון הזה.

  13. 05:17

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

  14. 05:48

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

  15. 06:03

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

  16. 06:21

    איזה רכיבים יש בתוך הטופס? בואו ניקח אינפוט עבור השם של המוצר type text יש לנו כאן placeholder name מה בעצם אנחנו רוצים מהיוזר זה רק עבור השם בואו נראה פה איזה שתי שורות ניקח את כל זה נשכפל אבל הפעם אנחנו רוצים number אנחנו רוצים שהוא ייתן לנו פרייס וניתן לו כאן step זה מאפשר להכניס

  17. 06:58

    גם ערכים של נקודה עשרונית ב-number של ה-HTML, אנחנו צריכים האמת לכל input גם name, חובה אם אנחנו שולחים את זה בסדמית של טופס. זה השם של המוצר, name זה ה-price שאנחנו רוצים של המוצר.

  18. 07:23

    יש לנו עוד אחד עבור ה-stock, stock הוא מספר שלם אז אין צורך בזה, ה-name שלו זה stock, ואנחנו רוצים עוד אחד input, typefile כמו שלמדנו בעבר איך אנחנו מעלים תמונות לשרת name זה image זה התמונה של המוצר accept אנחנו רוצים בעצם סיומות של מוצרים בואו ניקח כרגע נאפשר רק jpeg כי בוא נניח שכל המוצרים שלנו הם jpeg אז

  19. 08:02

    נאפשר כל התמונות שלנו jpeg נאפשר גם הפעם רק jpeg כמובן אפשר כל סיומת שאנחנו רוצים בנוסף, מה שאנחנו רוצים זה איזשהו לחצן submit, button זה by default submit, וכתוב עליו add. הנה יש לנו כרגע את הטופס, בואו נבדוק, הוא בעצם מביא לנו אותו, נעצור, נריץ,

  20. 08:31

    נרפרש, יש לנו פה create a new product, וכמובן שכדאי לנו להוסיף לו טיפה עיצוב, את זה אנחנו נבצע ב-CSS, בואו נחזור ל-CSS, ונגיד כזה דבר אם יש לנו אינפוטים ובטנים אז אנחנו רוצים font size נניח extra large נגדיל את הגופנים שלהם שיתאימו לשאר הטקסטים ספציפית עבור בואו ננסה אפילו

  21. 09:08

    300 פיקסלים נראה איך זה מבצע פרש קצת לא הכי מתאים no file selected אולי נבצע 400 אוקיי נניח שזה בסדר נראה לי 300 יותר הגיוני נבצע כזה דבר אם אתה input file type file font size יש לנו הוא אנישיאל, תן לי, no file chosen, בסדר, נניח שזה מספק אותנו כרגע, סוג של עיצוב ממש פשוט, נראה פה גם איזה שתי שורות,

  22. 10:22

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

  23. 10:42

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

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

ההרצאה הקודמת: הצגה מפורטת של המוצר בנוד NodeJS

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

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

  • הוספת דומיין חדש - ל-AZURE
  • הוספת נתון חדש למסד נתונים
  • הוספת VMkernel
  • הצגת פרטי מוצר

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

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