NodeJS में Environment Variables का उपयोग
dotenv का उपयोग
Secrets और API Tokens को सुरक्षित रूप से हैंडल करना
संबंधित लेख: अपने Tokens को सुरक्षित रखें
आइए secret और non-secret के बीच के अंतर को जल्दी से दोहराते हैं।
- 🔒
Secret keysको 3rd party API services को छुपाने (proxy) के लिए हमेशा कस्टम सर्वर (जैसे Node/Express/Heroku) का उपयोग करना चाहिए। - 🌍
Non-secret keysउन keys को दर्शाता है जिन्हें browser को भेजा जा सकता है।
हम इस लेख में Environment Variables का उपयोग करके 🔒
Secret keysसे निपटने पर ध्यान केंद्रित करेंगे।
अवलोकन
अपने NodeJS कोड में secrets तक सुरक्षित रूप से पहुँचने के लिए:
- हार्ड-कोडेड keys को environment variables से बदलें। उदा.
process.env.API_SECRET dotenvलाइब्रेरी के साथ.envफ़ाइल का उपयोग करें। अपनी पहले से हार्ड-कोडेड secrets को.envफ़ाइल में जोड़ें।- अपनी
.gitignoreफ़ाइल में.envलाइन की पुष्टि करें!
न करें deployed servers पर
.envफ़ाइल बनाएं। अपनी होस्टिंग सेवा (जैसे Heroku, Netlify, AWS EC2) के प्रदान किए गए environment variable प्रबंधन टूल का उपयोग करें: जैसे dashboard या command line।
कोड उदाहरण
हम कुछ फ़ाइलें परिभाषित करने जा रहे हैं।
.env./db/connection.js./api/users.js
सबसे पहले, dotenv पैकेज इंस्टॉल करें।
npm install dotenvइसके बाद, अपने प्रोजेक्ट के root में .env फ़ाइल बनाएं।
PGDATABASE="postgres"PGHOST="localhost"PGPORT=5234PGUSER="postgres"PGPASSWORD="password"❌ .env फ़ाइल को कभी commit न करें।
❌ servers पर .env बनाने से बचें।
environment variables सेट अप करने के लिए अपने Hosting Provider के docs देखें।
आसानी से सुनिश्चित करने के लिए कि आपकी .gitignore में .env लाइन है।
# Automatically update .gitignore# Run in terminal:[ "$(grep '^.env' .gitignore)" == "" ] && echo '.env' >> .gitignore# note: no output will print./db/connection.js फ़ाइल एक साझा pg.Pool instance प्रदान करती है। इसका उपयोग database को query करने के लिए किया जाएगा।
require('dotenv').config(); // ✅ Load .env fileconst pg = require('pg');const {PGUSER, PGHOST, PGPORT} = process.env;
if (process.env.NODE_ENV === 'development') console.log(`Connecting to ${PGUSER} @ ${PGHOST}:${PGHOST}`);// ^^ only for showing debug connection vars
// pg automatically uses PG* env variablesmodule.exports = new pg.Pool();./api फ़ोल्डर में आपकी tables/views के interfaces होते हैं।
यहाँ users table के लिए एक उदाहरण ./api/users.js दिया गया है।
const db = require('../db/connection.js');
module.exports = { findUsername: function(username) { return db.query('SELECT * FROM users WHERE username=$1', username); }};- अपनी
.envsecrets को git में कभी commit न करें! - टीम पर
.envफ़ाइलें साझा न करें। *
* प्रत्येक नए development laptop या desktop को नए access keys और tokens जनरेट करने चाहिए।
यदि यह संभव नहीं है, तो अपनी .env साझा करते समय पर्याप्त सावधानी बरतें (उन मामलों में जहाँ कोई सेवा सभी पुरानी keys को अमान्य कर सकती है, या आपके पास किसी paid API की सीमित access token हो।)
⚠️ महत्वपूर्ण: यदि आवश्यक हो, तो हमेशा secure messaging service ( preferably expiring message support के साथ) का उपयोग करें।
शुभकामनाएँ और मुझे बताएँ यदि आपके कोई प्रश्न हैं! 🎉