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

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

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

שיתוף מידע בין ראוטרים ב express js

מתוזמן נעוץ נעול הועבר תכנות
11 פוסטים 5 כותבים 196 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מוטי אורןמ מנותק
    מוטי אורןמ מנותק
    מוטי אורן
    כתב ב נערך לאחרונה על ידי
    #1

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

    כתבתי class לניהול המשתמשים (כמובן שברגע שנופל השרת מכל סיבה שהיא לא נשאר כלום מהמידע), ה class נראית בערך ככה:

    class Users {
      constructor() {}
    
      createUser() {}
      editUserProfile() {}
      deleteUser() {}
    }
    

    זה בגדול המתודות של ה class, ואני עושה לו export singleton ככה:

    module.exports = new Users();
    

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

    בנוסף יש לי תקייה שאחראית על הניתוב בשם 'routes', בתיקייה הזאת שמתי ראוטר להתחברות 'login', וראוטר להרשמה 'signup'.

    בקובץ app.js אני צורך את הראוטרים עם require, ואני רוצה שכל הראוטרים של ה users כמו התחברות והרשמה, יקבלו את אותו קלאס דרך app.js לצורך העניין, ויעבדו מולו. כי מה שקורה אם אני מייבא את הקלאס לתוך כל אחד מהראוטרים, זה בעייתי - כי הוא מקבל קלאס חדש שאין בו את המערך של היוזרים.

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

    ב תגובה 1 תגובה אחרונה
    2
    • ב מנותק
      ב מנותק
      ב.ל
      השיב למוטי אורן ב נערך לאחרונה על ידי
      #2

      @מוטי-אורן אמר בשיתוף מידע בין ראוטרים ב express js:

      module.exports = new Users();

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

      ליצירת קשר - baruchlamdan@gmail.com

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

        @ב-ל אמר בשיתוף מידע בין ראוטרים ב express js:

        אתה צריך להכניס את new Users לתוך משתנה ותייצא את המשתנה

        אאל"ט, מה שהוא עושה זהה לגמרי למה שאתה מציע. 🤔

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

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

          @yossiz אמר בשיתוף מידע בין ראוטרים ב express js:

          אאל"ט, מה שהוא עושה זהה לגמרי למה שאתה מציע. 🤔

          למה זה אותו דבר? הוא מייבא את הקלאס עם המערך ולא מאתחל אותו מחדש.

          ליצירת קשר - baruchlamdan@gmail.com

          yossizY תגובה 1 תגובה אחרונה
          0
          • OdedDvirO מנותק
            OdedDvirO מנותק
            OdedDvir
            כתב ב נערך לאחרונה על ידי OdedDvir
            #5

            @מוטי-אורן אמר בשיתוף מידע בין ראוטרים ב express js:

            module.exports = new Users();

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

            module.exports = Users;
            

            ותייבא לכל הראוטים כך:

            const Users = require('users');
            

            ב-app.js תיצור אובייקט מופע יחיד של המחלקה:

            const Users = require('users');
            
            const myUsers = new Users();
            

            ואותו myUsers תיצא לראוטים.

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

              @ב-ל כמו"כ ב:

              module.exports = new Users();
              

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

              @odeddvir אמר בשיתוף מידע בין ראוטרים ב express js:

              אתה יוצר בכל פעם מופע חדש

              לכאורה לא. כנ"ל. למה אני טועה?

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

              OdedDvirO מוטי אורןמ 2 תגובות תגובה אחרונה
              3
              • OdedDvirO מנותק
                OdedDvirO מנותק
                OdedDvir
                השיב לyossiz ב נערך לאחרונה על ידי
                #7

                @yossiz אמר בשיתוף מידע בין ראוטרים ב express js:

                למה אני טועה

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

                תגובה 1 תגובה אחרונה
                4
                • מוטי אורןמ מנותק
                  מוטי אורןמ מנותק
                  מוטי אורן
                  השיב לyossiz ב נערך לאחרונה על ידי
                  #8

                  @yossiz וגם @OdedDvir וואו איך לא חשבתי על זה.. אתם אומרים פשוט לצרוך את הקלאס פעם אחת ב app.js ואז לייצא את אותו קלאס לכל הראוטרים. טוב, קורה ששוכחים דברים בסיסיים. בכל מקרה, תודה רבה!

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

                  yossizY chvC 2 תגובות תגובה אחרונה
                  0
                  • yossizY מנותק
                    yossizY מנותק
                    yossiz
                    השיב למוטי אורן ב נערך לאחרונה על ידי yossiz
                    #9

                    @מוטי-אורן אמר בשיתוף מידע בין ראוטרים ב express js:

                    אתם אומרים...

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

                    לא. אני אמרתי הפוך שזה לא אמור להיות בעיה ואני באמת עדיין לא מבין מה גרם לבעיה שלך (וגם @OdedDvir כנראה מסכים לדברים )

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

                    מוטי אורןמ תגובה 1 תגובה אחרונה
                    4
                    • מוטי אורןמ מנותק
                      מוטי אורןמ מנותק
                      מוטי אורן
                      השיב לyossiz ב נערך לאחרונה על ידי
                      #10

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

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

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

                        @מוטי-אורן אמר בשיתוף מידע בין ראוטרים ב express js:

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

                        זהו שלא, המודול נטען על ידי נוד פעם אחת בלבד ומאז הוא מוכנס למטמון (קאש) ומשם הוא נטען בכל פעם כשמבקשים אותו (require)
                        וזה מה שכתבו כאן.
                        ועי' https://nodejs.org/api/modules.html#modules_caching

                        בלוג | מייל

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

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

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

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