דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. אינטרנט
  3. בעיה בהעברת אובייקט שלם מ-Node ל-ejs

בעיה בהעברת אובייקט שלם מ-Node ל-ejs

מתוזמן נעוץ נעול הועבר אינטרנט
22 פוסטים 6 כותבים 700 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • yossizY מנותק
    yossizY מנותק
    yossiz
    השיב לdovid ב נערך לאחרונה על ידי
    #9

    @dovid אמר בבעיה בהעברת אובייקט שלם מ-Node ל-ejs:

    לפעמים עושר באפשרויות מוכיח שאין אפילו אחת טובה, וזה בדיוק המצב בTemplate engine של Express

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

    @odeddvir אמר בבעיה בהעברת אובייקט שלם מ-Node ל-ejs:

    אז מה עושים? ממשיכים להשתמש ומצפים לישועה?

    איזה ישועה? תיקון לבעיה קוסמטית בתוסף של עורך אחד? האם אתם לא מגזימים קצת את גודל הבעיה?

    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

    תגובה 1 תגובה אחרונה
    2
    • OdedDvirO מנותק
      OdedDvirO מנותק
      OdedDvir
      השיב לyossiz ב נערך לאחרונה על ידי OdedDvir
      #10

      @yossiz אמר בבעיה בהעברת אובייקט שלם מ-Node ל-ejs:

      אתה מנסה לעשות משהו ש-EJS לא נועד לו

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

      @yossiz אמר בבעיה בהעברת אובייקט שלם מ-Node ל-ejs:

      האם אתם לא מגזימים קצת את גודל הבעיה?

      היה משתמע מדברי @dovid שאין שום תוסף ראוי לרינדור באקספרס...

      yossizY 2 תגובות תגובה אחרונה
      0
      • yossizY מנותק
        yossizY מנותק
        yossiz
        השיב לOdedDvir ב נערך לאחרונה על ידי
        #11

        @odeddvir אמר בבעיה בהעברת אובייקט שלם מ-Node ל-ejs:

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

        לא התחברתי לניסוח של "להעביר אובייקט לסקריפט". אתה מנסה לכתוב סקריפט בצורה דינאמית. אין פה באמת "העברה" של האובייקט כמו העברה של פרמטר לפונקציה. אם היה לי צורך כזה באמת הייתי עושה מה שעשית -- JSON.parse(JSON.stringify) -- אולי הייתי גם מגיב באימוג'י שמבטא שאט נפש. ואז הייתי ממשיך בחיים.

        אני לא חושב שהמצב יותר טוב בשפות אחרות.

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

        @odeddvir אמר בבעיה בהעברת אובייקט שלם מ-Node ל-ejs:

        היה משתמע מדברי @dovid שאין שום תוסף ראוי לרינדור באקספרס...

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

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

        תגובה 1 תגובה אחרונה
        4
        • yossizY מנותק
          yossizY מנותק
          yossiz
          השיב לOdedDvir ב נערך לאחרונה על ידי yossiz
          #12

          @odeddvir אמר בבעיה בהעברת אובייקט שלם מ-Node ל-ejs:

          אולי בכלל זו לא גישה נכונה...

          קשה לענות בלי לדעת כל הפרטים. לדעתי הענייה הגישה יכול להיות לגיטימי במקרים מתאימים.

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

          תגובה 1 תגובה אחרונה
          2
          • yossizY מנותק
            yossizY מנותק
            yossiz
            השיב לOdedDvir ב נערך לאחרונה על ידי yossiz
            #13

            @odeddvir אמר בבעיה בהעברת אובייקט שלם מ-Node ל-ejs:

            const myClient = JSON.parse('<%-JSON.stringify(client)%>');

            האם אפשר להשמיט את הגרשים ואת הקריאה ל-JSON.parse, ולנצל את העובדה שאובייקט בתחביר JSON הוא גם אובייקט JS חוקי?

            אגב, גיגול זה: ejs pass object to client side script מביא פתרונות דומים לשלך.

            📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

            OdedDvirO תגובה 1 תגובה אחרונה
            3
            • OdedDvirO מנותק
              OdedDvirO מנותק
              OdedDvir
              השיב לyossiz ב נערך לאחרונה על ידי OdedDvir
              #14

              @yossiz אמר בבעיה בהעברת אובייקט שלם מ-Node ל-ejs:

              האם אפשר להשמיט את הגרשים ואת הקריאה ל-JSON.parse, ולנצל את העובדה שאובייקט בתחביר JSON הוא גם אובייקט JS חוקי?

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

              zvizviZ dovidD 2 תגובות תגובה אחרונה
              1
              • zvizviZ מנותק
                zvizviZ מנותק
                zvizvi
                השיב לOdedDvir ב נערך לאחרונה על ידי zvizvi
                #15

                @odeddvir אמר בבעיה בהעברת אובייקט שלם מ-Node ל-ejs:

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

                נסה לעשות את הstringify בצד השרת:

                res.render('client/details', { client: JSON.stringify(client) });

                https://zvizvi.xyz

                yossizY תגובה 1 תגובה אחרונה
                3
                • dovidD מחובר
                  dovidD מחובר
                  dovid ניהול
                  השיב לOdedDvir ב נערך לאחרונה על ידי dovid
                  #16

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

                  @OdedDvir זה בהחלט לגיטימי לרנדר אובייקט ישירות לסקריפט, וזה לדעתי בהחלט חלק מהייעוד של EJS לתת את היכולת הזו.

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  תגובה 1 תגובה אחרונה
                  1
                  • yossizY מנותק
                    yossizY מנותק
                    yossiz
                    השיב לzvizvi ב נערך לאחרונה על ידי
                    #17

                    @zvizvi אמר בבעיה בהעברת אובייקט שלם מ-Node ל-ejs:

                    @odeddvir אמר בבעיה בהעברת אובייקט שלם מ-Node ל-ejs:

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

                    נסה לעשות את הstringify בצד השרת:

                    res.render('client/details', { client: JSON.stringify(client) });
                    

                    לצערי לא הבנתי לא את הבעיה ולא את הפתרון. אבל זה לא קשור ישירות לנושא.

                    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                    zvizviZ תגובה 1 תגובה אחרונה
                    0
                    • zvizviZ מנותק
                      zvizviZ מנותק
                      zvizvi
                      השיב לyossiz ב נערך לאחרונה על ידי zvizvi
                      #18

                      למרות שזה לא הנושא הישיר אתן סקירה קטנה מנסיוני.
                      מנועי התצוגה (Template engine) בNode מתחלקים לשניים:

                      • אלה שמשתמשים במילים ופקודות שמורות משלהן עבור כל פקודה, והן שואבות השראה ממנועים אחרים בשפות אחרות (שם הדבר מפותח מאוד ובשימוש רב).
                        במנועים אלה האפשרויות מצומצמות למספר מילים שמורות בלבד (if, else, switch) וכד'. יש גם "פילטרים" שמאפשרים לשנות את הערך של משתנה המודפס לדוגמה: {{ count | add: 1}}
                        כאשר רוצים להציב תנאי מורכב או להציג ערך קומבינציה שמורכב מכמה פרמטרים יש צורך לבנות רכיב תצוגה מיוחד ולהעביר אותו לפקודת הRender בדומה להעברת שאר הData מצד השרת לטמפלט.
                        שיטה זו דומה למנועים אחרים רבים הקיימים בשפות אחרות, דוגמת Django של פייתון או Laravel של PHP,‏ ERB ברובי וכן הלאה.

                      • אלה שמאפשרים לשים פקודות Javascript מלאות בין חלקי הhtml בקובץ, כמו כן ניתן לשים תנאים מורכבים שתלויים בהרבה משתנים, ולא צריך לבנות לזה רכיב תצוגה במיוחד.
                        שיטה זו דומה לכתיב של php טהור בקבצי html.

                      בקבוצת המנועים הראשונה ניתן למנות את Pug (Jade לשעבר), Handlebars, mustache.js, ועוד,
                      בקבוצה השניה יש את Ejs (לדעתי זהו היחיד שקיים).

                      סגנון התחביר להכנסת פקודות בין חלקי הhtml משתנה בין הספריות השונות, יש כמה סגנונות מקובלים (ובכל שפת תכנות יש כמה שלקחו השראה מכל סגנון כזה)

                      באיזה מנוע כדאי להשתמש?

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

                      https://zvizvi.xyz

                      תגובה 1 תגובה אחרונה
                      11
                      • chvC מנותק
                        chvC מנותק
                        chv
                        כתב ב נערך לאחרונה על ידי chv
                        #19

                        בלי להעיב על הפירוט המעולה של @zvizvi שמעליי, ועם דעתי ההדיוטית:
                        @OdedDvir התנסתי הרבה עם HBS (handlebars) - כן זה עם השפם (אם אני משער נכון זה על המשקל של mustache שהיא באה להחליף?)
                        הוא מעולה.
                        ועד כמה שאני זוכר נכון (ומסתכל בקוד שקיים אצלי במחשב וזה נראה ש=) הוא נותן בקלות להעביר אובייקטים לתוך משתנים בפרונט-אנדJS. ממה שאני רואה אצלי בקוד (שוב: רק ממבט מלמעלה) זה פשוט להעביר את זה ממש בצורה הרגילה - להכניס את זה בשלב הרינדור לפקודה כקונטקסט, ובתוך הטמפלייט להכניס את זה ב {{ }}
                        עריכה טעות שלי (אולי זה אפשרי, בכל אופן אני לא מכיר) עי' יוסי להלן

                        אגב @yossiz שאלת או אמרת באיזה עוד פלטפורמות יש מנועים כאלה (לפחות הידועים שבהם) אז כמובן מדובר על דג'אנגו, שזה מובנה בו וזה צורת העבודה איתו מלכתחילה

                        סורי שהפרעתי ותודה ל @zvizvi על הפוסט הבהיר

                        בלוג | מייל

                        dovidD yossizY 2 תגובות תגובה אחרונה
                        4
                        • dovidD מחובר
                          dovidD מחובר
                          dovid ניהול
                          השיב לchv ב נערך לאחרונה על ידי
                          #20

                          @chv מה ש@yossiz שאל, זה איפה יש מנוע תצוגה שטוב יותר מההיצע שיש בנוד.

                          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                          בכל נושא אפשר ליצור קשר dovid@tchumim.com

                          תגובה 1 תגובה אחרונה
                          3
                          • yossizY מנותק
                            yossizY מנותק
                            yossiz
                            השיב לchv ב נערך לאחרונה על ידי
                            #21

                            @chv אמר בבעיה בהעברת אובייקט שלם מ-Node ל-ejs:

                            ועד כמה שאני זוכר נכון (ומסתכל בקוד שקיים אצלי במחשב וזה נראה ש=) הוא נותן בקלות להעביר אובייקטים לתוך משתנים בפרונט-אנדJS. ממה שאני רואה אצלי בקוד (שוב: רק ממבט מלמעלה) זה פשוט להעביר את זה ממש בצורה הרגילה - להכניס את זה בשלב הרינדור לפקודה כקונטקסט, ובתוך הטמפלייט להכניס את זה ב {{ }}

                            אני לא מכיר את HBS אבל מהתשובה פה נראה שאי אפשר.

                            📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                            chvC תגובה 1 תגובה אחרונה
                            1
                            • chvC מנותק
                              chvC מנותק
                              chv
                              השיב לyossiz ב נערך לאחרונה על ידי
                              #22

                              @yossiz צודק.. (כתמיד) עכשיו הסתכלתי וראיתי שבמקור של אותה שורה העברתי את האובייקט לטמפלייט כסטרינגיפיי..

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

                              בלוג | מייל

                              תגובה 1 תגובה אחרונה
                              2

                              • 1
                              • 2
                              בא תתחבר לדף היומי!
                              • התחברות

                              • אין לך חשבון עדיין? הרשמה

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