עזרה בnode.js/ express
-
@ב-ל זה היה רק ניחוש. קודם נבדוק אם צדקתי ואז אני אסביר את דברי אם נשאר משהו לא ברור.
האם אתה יכול לבדוק בכלי המפתחים את התשובה שקיבלת?
אני מצפה שתראה בתשובה את התוכן של הקובץ Messilat_yesharim.txt ומיד לאחריה את ה-HTML שמרונדר על ידיres.render
. -
@ב-ל יש בקוד שלך שני שורות,
בשורה הראשונה אתה יוצר זרם קריאה מקובץ טקסט (יש לך פה סיכון אבטחה קטן פה - המשתמש יכול לקרוא כל קובץ טקסט בכל המחשב שלך עם שימוש בקומבינות של ../ )
כעת בסוף השורה אתה מעביר את הזרם של הקריאה בשלמותו לתשובה לדפדפן (בלי שום רנדור של תבנית). אני מניח שזה שארית מהמצב ללא רנדור תבנית כי עם רנדור תבנית זה לא הגיוני, אז תדאג למחוק את זה: .pipe(res)
בשורה השניה אתה משתמש בתבנית ונותן לה אובייקט פרמטרים עם מאפיין namebooks שנלקח מפרמטר מהבקשה, ופרמטר text שבו אתה שם את אובייקט התשובה res, זה לא הגיוני.
אני מניח שאתה רצית לעשות ככה:var fileStream = fs.createReadStream(...); res.render('books', {namebooks: req.params.name, text: fileStream });
אם זה לא עובד אני מניח שהמאפיין text לא אמור לקבל זרם אלא את הטקסט בעצמו שזה אומר לכתוב ככה:
fs.readFile(..., function (err, data ) { res.render('books', {namebooks: req.params.name, text: data}); });
-
@dovid אמר בעזרה בnode.js/ express:
יש לך פה סיכון אבטחה קטן פה
תודה שהערת את תשומת לבנו לנושא.
למדתי עכשיו מהתיעוד ש-path.join
כבר עושה נירמוליזציה לנתיב (הורדת.
ו-..
מאמצע הנתיב) עכשיו נשאר רק לוודא שהנתיב מתחיל בתיקייה הנכונה.
מקורות: -
-
@יוסף-בן-שמעון אמר בעזרה בnode.js/ express:
כמובן שבקבצים כבדים זה יגרום לדליפת זיכרון
צריכת זיכרון גבוהה איננה "דליפת זיכרון" - https://www.hamichlol.org.il/דליפת_זיכרון
אולי בנוד זה תמיד הולך ביחד, כלומר זה גורר את זה (יש לי חשש בלתי מבוסס בכיוון...). -
@dovid אמר בעזרה בnode.js/ express:
@yossiz יש לך ניסיון עם צריכות זיכרון גבוהות?
לא...
התכוונתי לשני דברים, א) אני סקפטי שבתוכנה מבוססת כמו נוד יש עדיין דליפות זכרון שהם באשמת מפתחי נוד
ב) במקרה של קריאה של קובץ גדול לזכרון אין שום סיבה שזה יגרום לדליפה יותר מבמקרה של קובץ קטן. -
@yossiz
נתחיל מב'. אין שום דליפת זיכרון, זה רק ביטוי לזיכרון שלא משתחרר.
נניח אתה יוצר מערך של מליונים בנוד יש לך מה להיות לחוץ. בעצם לא, כי זה רץ עם PM2... אתה מכיר כאלה דיבורים/אוירה בנוד?
זה לא דליפה, זה פשוט אוסף זבל שעושה רושם שהוא עובד בהתנדבות. זה הרעיון שאני הרגשתי בלי הרבה בדיקות ובלי נסיון חזק מידי עם נוד.נעבור לא'. איך ייתכן? כבר רמזתי בתשובה הראשונה שבכלל זה לא מאיים על המוצר. שנית לא מדובר אולי בנוד, אלא בV8. מה הרווחתי מלהעביר את האחריות לV8? הוא מיועד ליישומים עם אורך חיים של פחות משבוע... ועם צריכות זיכרון שמותר לה להישאר תפוסה עד סיום החיים של האפליקציה.
יש לי בלב אמונה (אולי זה גם רגשות שאין מאחוריהם חקירה ובדיקה של העבודות)
שבזמן שמפתחי microsoft explorer עבדו קשה על תכנון קוד בטוח ותקין ופספסו את המטרה של התוכנה, מתכנתי chrome היו פנויים לחגוג באגרסיביות תוך התמקדות בביצועי המוצר. -
יש עוד שני נקודות שרציתי להוסיף:
החויה שלי עם זיכרון רב התחילה עם הפורום הזה. היתה בעיה אמיתית של דליפת זיכרון אבל גם אחרי שהיא תוקנה בגירסאות מעודכנות שמתי לב ששינויים בזיכרון הם לרוב לכיוון העליה ולא הירידה. כששוטטתי בקוד אמנם ראיתי שהוא ענק ויש הרבה מקום לפספוסים אבל הוא היה כתוב מקצועית מאוד כך שהתחושה שלי הייתה שיש בעיה בפלטפורמה. חיפושים באינטרנט העלו שזה אכן משהו נפוץ בנוד אבל בעיקר בגלל הטבע של השפה - שמשאירה "ידיות" רבות לכל אובייקט שממעיטות את הסיכוי שלו לההפך למיותר ולהימחק.
כיון שכבר עבר שנתיים ייתכן שזה לא רלוונטי אבל נוד הייתה אז בוגרת בדיוק כמו היום.