PracticU

עריכה ועדכון של מוצר קיים בנוד NodeJS

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

עריכה ועדכון של מוצר קיים בנוד NodeJS
עדכון מוצר קיים מחייב שני ראוטים, כמו הוספה: GET שמציג טופס עריכה עם הפרטים הקיימים, ו-POST שמבצע את העדכון. ההרצאה בונה את שניהם ובודקת גם שגיאות ולידציה.
השלבים העיקריים
1. קישור עריכה: בדף הפרטים מוסיפים קישור edit שכתובתו /products/edit/ ואחריה product.id בתגית צד-שרת. ההבחנה: edit מאפשר למשתמש לערוך, ו-update הוא הפעולה שמתבצעת כשהוא לוחץ על הכפתור.
2. ראוט GET: router.get ל-/edit/:id עם try/catch. מביאים את המוצר מה-business logic לפי ה-id ממעבר request.params, ומבצעים render ל-products/edit עם המוצר, כדי שהמשתמש יראה את הערכים הקודמים. אם אין מוצר כזה, מפנים לדף page-not-found.
3. דף העריכה: משכפלים את create.ejs ל-edit.ejs, משנים כותרת, ו-action הטופס לנתיב /products/edit/ עם product.id. ה-value של השדות הוא פשוט product.name, product.price ו-product.stock, בלי טרינרי, כי בעריכה תמיד יש מוצר. הכפתור מקבל את הטקסט Update.
4. ראוט POST: מעתיקים את ה-POST של ההוספה ומתאימים אותו: נתיב /edit/:id, מזהה מ-request.params.id בתוך המוצר, ולידציה עם validatePut (אין צורך ב-patch), ואם יש שגיאות מחזירים את דף העריכה עם המוצר והשגיאות. אחר כך קוראים ל-updateFullProduct.
5. מוצר שלא קיים: אם העדכון לא החזיר מוצר, שולחים page-not-found.
6. תמונה: אם נשלח קובץ, לוקחים את הסיעת ומעבירים אותו לתיקיית התמונות בשם product.id, ודורסים את התמונה הקודמת. אם לא נשלח, התמונה הקיימת נשארת. בסוף מבצעים redirect לרשימת המוצרים.
7. בדיקה: מעדכנים את התפוח ל-Green Apple עם מחיר 6.8 ו-190 במלאי ותמונה חדשה. התוצאה מופיעה ברשימה, והקובץ הישן של אותו ID נדרס. ערכים שגויים מציגים את הודעות השגיאה.
שימו לב
כשמעתיקים קוד מהוספה, צריך לעבור עליו בעיון ולחפש כל מה שצריך לשנות, כמו נתיב ושם משתנה.
אפשר עכשיו לבנות תהליך עדכון שלם בגישת templating engine.
השיעור הבא בקורס: מחיקת מוצר קיים בנוד NodeJS

פרקי ההרצאה: עריכה ועדכון של מוצר קיים בנוד NodeJS

  1. 00:00

    לינק עריכה בדף Details

  2. 00:42

    ההבדל בין edit ל-update

  3. 02:05

    שני ראוטים לעריכת מוצר

  4. 03:19

    שליפת המוצר ורנדור דף העריכה

  5. 04:19

    טיפול במוצר שלא קיים

  6. 04:58

    יצירת דף edit מתוך create

  7. 05:42

    טופס post עם ה-ID

  8. 06:42

    ערכי המוצר בשדות הטופס

תמלול ההרצאה: עריכה ועדכון של מוצר קיים בנוד NodeJS

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

  1. 00:03

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

  2. 00:17

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

  3. 00:37

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

  4. 00:52

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

  5. 01:07

    href שווה ובואו נניח שאנחנו רוצים לתת איזשהו route product/edit אבל כאשר עושים edit צריך להעביר גם את הקוד של המוצר, איזה מוצר אנחנו רוצים לעדכן.

  6. 01:24

    בואו נעבור לצד שרת, השמה product.id נרווח טיפה והנה יש לו אפשרות גם ללינק כזה שמאפשר לו בלחיצה עליו להגיע לראוט של עריכת המוצר. בואו רגע נראה איפה זה מתבצע, אם אני לוחץ על צ'אי אז אני רואה פה את ה-Back to List ו-Edit, כאשר עדיין אין לנו את הראוט הזה.

  7. 01:56

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

  8. 02:16

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

  9. 02:34

    הראוט השני זה כבר ההוספה עצמה. אז בואו ניגש ל-router.get כי אנחנו רוצים לתת לו טופס לעריכה אם ה-user גולש ל-products/edit/ונותן לי ID, אנחנו רוצים לבנות לו את הפונקציה הזאת.

  10. 02:57

    יש לנו פה את ה-QuestResponse, יש לנו את ה-TryCatch שלנו, בואו כבר נעתיק את ה-Catch מפה, אנחנו רוצים ב-Try לגשת ולהביא לו את המוצר הזה, קונסט פרודקט שווה wait product logic נקודה get one product.

  11. 03:29

    תביא לי את המוצר, בואו רגע ניקח את ה-id שלו. יש לנו פה קונסט id יש לנו את ה-request.paramsid שולחים לו את ה-id ואז הביזנס לוג'יק מביא לנו את המוצר. למה אנחנו צריכים את המוצר?

  12. 03:50

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

  13. 04:20

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

  14. 04:33

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

  15. 04:56

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

  16. 05:10

    בואו נשכפל אותו לאדיט ונראה מה אנחנו צריכים לשנות כאן. אז בקריאייט, למה אין לי פה h2 add a new product זה היה אמור להיות לי אני לא יודע למה אין לי אותו.

  17. 05:35

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

  18. 05:57

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

  19. 06:25

    אנחנו בינתיים לא ב-create, ב-edit, אנחנו בינתיים רוצים לראות מה עוד אנחנו צריכים לשנות.

  20. 06:35

    אז כשהיוזר רוצה to edit product, יש לו כמובן תיבת טקסט עבור ה-name, פליי סולדר נשאיר, למרות שאמור להיות לו כבר ערך, אבל יכול להיות שהוא ימחק אותו, אז אוטומטית הוא יראה name.

  21. 06:49

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

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

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

ההרצאה הבאה: מחיקת מוצר קיים בנוד NodeJS

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

  • הוספת מודלים - ועדכון מסד הנתונים
  • ריאקט - דף 404 - עמוד לא קיים / דף לא נמצא
  • גלישה ל-Route שאינו קיים
  • פתיחת פרויקט קיים ב-Android Studio

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

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