Kodokon kodokon.com

कॉन्फ़िगरेशन और सीक्रेट

dotenv के साथ कॉन्फ़िगरेशन को कोड से बाहर निकालें, डेवलपमेंट को प्रोडक्शन से अलग करें, और अपने सीक्रेट को Git से बाहर रखें।

8 मिनट · 3 प्रश्न

इस पाठ को Kodokon में खोलें

सुनने वाला पोर्ट, डेटाबेस URL, API कुंजियाँ: इनमें से कोई भी सोर्स कोड में नहीं होनी चाहिए। ये वैल्यू आपकी मशीन और प्रोडक्शन के बीच बदलती हैं, और कुछ सीक्रेट होती हैं। मानक समाधान: एनवायरनमेंट वेरिएबल, जो डेवलपमेंट में एक .env फ़ाइल से लोड होते हैं। npm install dotenv के साथ dotenv इंस्टॉल करें, फिर प्रोजेक्ट की जड़ में फ़ाइल बनाएँ।

BASH
PORT=3000
DATABASE_URL=postgres://localhost:5432/kodokon
SESSION_SECRET=change-this-value
.env - प्रति लाइन एक वेरिएबल

अपने प्रवेश बिंदु की एकदम शुरुआत में dotenv/config इम्पोर्ट करें: फ़ाइल के वेरिएबल process.env में कॉपी हो जाते हैं। एक अच्छी पेशेवर आदत: पठन को एक ही कॉन्फ़िगरेशन मॉड्यूल में केंद्रित करें, शुरुआत में वेरिएबल की जाँच करें, और यदि कोई गायब है तो तुरंत विफल हो जाएँ। एक ऐसा सर्वर जो शुरू होने से इनकार कर देता है, उस सर्वर से बेहतर है जो पहली रिक्वेस्ट पर क्रैश हो जाए।

JAVASCRIPT
import "dotenv/config";

const required = ["PORT", "SESSION_SECRET"];

for (const name of required) {
  if (!process.env[name]) {
    throw new Error("Missing variable: " + name);
  }
}

export const config = {
  port: Number(process.env.PORT),
  secret: process.env.SESSION_SECRET,
  isProd: process.env.NODE_ENV === "production"
};
config.js - एकमात्र मॉड्यूल जो process.env पढ़ता है

प्रोडक्शन में, कोई .env फ़ाइल नहीं होती: होस्ट असली वैल्यू प्रदान करता है, और NODE_ENV production होता है। व्यवहार को अनुकूलित करने के लिए config.isProd का उपयोग करें: डेवलपमेंट में विस्तृत लॉग, प्रोडक्शन में संयमित त्रुटि संदेश। साथ ही एक .env.example फ़ाइल कमिट करें जिसमें अपेक्षित वेरिएबल डमी वैल्यू के साथ सूचीबद्ध हों: यह सीक्रेट को उजागर किए बिना कॉन्फ़िगरेशन का दस्तावेज़ीकरण करती है।

JAVASCRIPT
import express from "express";
import { config } from "./config.js";

const app = express();

if (!config.isProd) {
  console.log("Development mode");
}

app.listen(config.port, () => {
  console.log("Port: " + config.port);
});
server.js - बाकी कोड process.env को अनदेखा करता है

ज्ञान जांच

सुनिश्चित करें कि आपको इस पाठ के मुख्य बिंदु याद हैं।

  1. आप डेटाबेस पासवर्ड कहाँ रखते हैं?
    • सोर्स कोड में एक स्थिरांक में
    • Git द्वारा अनदेखी की गई एक .env फ़ाइल में
    • प्रोजेक्ट README में
    • कॉन्फ़िगरेशन फ़ाइल में एक टिप्पणी में
  2. .env.example फ़ाइल का उद्देश्य क्या है?
    • असली बैकअप वैल्यू रखने के लिए
    • संवेदनशील वैल्यू के बिना, अपेक्षित वेरिएबल का दस्तावेज़ीकरण करने के लिए
    • परीक्षण एनवायरनमेंट को कॉन्फ़िगर करने के लिए
  3. गलती से एक सीक्रेट कमिट हो गया। आप सबसे पहले क्या करते हैं?
    • कमिट को हटाना और आगे बढ़ना
    • सीक्रेट को रद्द करना और एक नया उत्पन्न करना
    • फ़ाइल को .gitignore में जोड़ना