אינטרנט ישראל
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
ראשי » פיתוח אינטרנט » ספריות ומודולים » המנעות מ-Magic Strings באמצעות env.

המנעות מ-Magic Strings באמצעות env.

רן בר-זיק יולי 19, 2021 7:07 am 3 תגובות

מהן מחרוזות קסם ומספרי קסם ולמה זה רעיון רע להשתמש בהן.

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.

אם יש משהו שמדליק לי נורות אדומות כשאני רואה קוד – זה שימוש ב-Magic numbers. מה זה אומר? זה אומר מחרוזות של טקסט או מספרים קבועים בטקסט באמצע הקוד. למשל משהו כזה:

const totalPrice = 1.17 * price;

או משהו בסגנון הזה:

const result = await fetch('https://some-api-url.com/rest/is/awsome');

או משהו בסגנון הזה:

  let transporter = nodemailer.createTransport({
    host: 'smtp.mail.mydomain.com',
    port: 465,
    secure: true, 
    auth: {
      user: process.env.user, 
      pass: process.env.pass,
    },
  });

מה הן מחרוזות הקסם? בדוגמה הראשונה המע"מ. בדוגמה השניה הכתובת של ה-API ובדוגמה השלישית ה-host וה-port.

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

// בקובץ אחד זה ככה
const result = await fetch('https://some-api-url.com/rest/is/awsome');
// בקובץ שני זה יכול להיות ככה
const baseUrl = 'https://some-api-url.com';
const result = await fetch(`${baseUrl}/rest/is/awsome`);
// בקובץ שלישי זה יכול להיות אחרת לגמרי
const scheme = 'https';
const baseUrl = `${scheme}some-api-url.com`;
const result = await fetch(`${baseUrl}/rest/is/awsome`);

וכן, זה בהחלט יכול להיות בפרויקט של כמה שנים שעובדים עליו כמה וכמה מפתחים. ואז מחליפים את ה-API ל-whatever-api-url.com והמתכנת שצריך להחליף את הכתובת עושה העתק והחלף ל-https://some-api-url.com/rest/is/awsome ואז יש את השינוי והכל בפרודקשן מתחרבש כי מפספסים את הקובץ השני והשלישי, ואז המפתח, שגם ככה הוא בלחץ עושה חפש החלף ל-https://some-api-url.com אבל מפספס את הקובץ השלישי – והכל נורא.

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

יש כמה דרכים לעשות את זה ואני אסקור אחת בג'אווהסקריפט – שימוש ב-env. מדובר במודול מאוד חביב של Node.js. המודול, נקרא dotenv והוא פשוט ממש לשימוש. איך משתמשים בו? ראשית, מתקינים אותו כמו כל מודול של npm:

npm install dotenv

טוענים אותו בנקודת הכניסה של הפעלת המערכת שלכם. כאן זה תלוי במערכת אבל בד"כ ב-index.js או ב-app.js אם זה אקספרס באופן הזה:

require('dotenv').config()

מהנקודה הזו ניתן ליצור קובץ env. (הנקודה בהתחלה) שנראה כך:

API_URL=https://some-api-url.com/rest/is/awsome

מהנקודה הזו, ניתן להשתמש בכל מה שיש בקובץ הזה כך:

const result = await fetch(process.env.API_URL);

בכל מקום שבו רוצים להשתמש בכתובת. והמידע נשמר בקובץ ה-env. פשוט וקל.

לא חייבים לטעון את dotenv בהתחלה אלא להשתמש ב-r- כשמריצים את האפליקציה:

node -r dotenv/config your_script.js

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

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.
תכנות

3 תגובות

  1. רוני הגב יולי 19, 2021 בשעה 11:50 am

    אני שומר את הקונפיגורציה כקובץ JSON וטוען אותו ע"י REQUIRE:
    const settings = require('settings.json');

  2. משתמש אנונימי (לא מזוהה) הגב יולי 22, 2021 בשעה 11:23 pm

    אם יש משהו שמדליק לי נורה אדומה בקוד – זה הערות בעברית 😁

    טוב, יש עוד כמה.

  3. Shaya הגב אוגוסט 2, 2021 בשעה 1:41 pm

    יש שגיאת כתיב בקוד, (לא נורא אבל לא "נראה טוב"…)

    'https://some-api-url.com/rest/is/awsome'

    "awsome" במקום awesome"

    ב-6 מקומות

    תודה רן על המאמרים המחכימים!

השארת תגובה

ביטול

ללמוד ג'אווהסקריפט בעברית

ללמוד לתכנת ג'אווהסקריפט בעברית שגייס יותר משלוש מאות אלף שקל ולמעלה מ-2000 תומכים - בואו ללמוד עכשיו איך לתכנת.

רשימת הנושאים
  • מדריכים
    • ריאקט
    • טייפסקריפט
    • ECMAScript 6
    • ES20XX
    • Node.js
    • Express
    • רספברי פיי
    • Babel
    • docker
    • MongoDB
    • Git
    • לימוד MySQL
    • SASS
    • jQuery
    • CSS3
    • HTML 5
    • SVN
    • LESS
  • פיתוח אינטרנט
    • פתרונות ומאמרים על פיתוח אינטרנט
    • jQuery Scripts
    • jQuery למתקדמים
    • יסודות בתכנות
    • נגישות אינטרנט
  • חדשות אינטרנט
  • מידע כללי על אינטרנט
    • רשת האינטרנט
    • בניית אתרי אינטרנט
  • rss logo

    לכל המאמרים

    לכל המאמרים שפורסמו באינטרנט ישראל משנת 2008 ועד עכשיו.
  • rss logo

    RSS Feed

    משתמשים בקורא RSS? אם כן, עקבו אחרי אינטרנט ישראל באמצעות פיד ה-RSS!
    מה זה RSS?
  • Twitter logo

    עקבו אחרי בטוויטר

    בחשבון הטוויטר שלי אני מפרסם עדכונים מהירים על חדשות בתחום התכנות והיזמות, התרעות על מצבי חירום ורכילות בוערת על תחום הווב.
    מה זה טוויטר?
  • facebook like image

    ערוץ הטלגרם של אינטרנט ישראל

    בערוץ הטלגרם של אינטרנט ישראל אני מפרסם את הפוסטים של באתר וכן עדכונים טכנולוגיים נוספים.
    מה זה טלגרם?
  • github logo

    הפרויקטים שלי בגיטהאב

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

כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

גלילה לראש העמוד