متغیرهای محیطی به کاهش درد پیکربندی و استقرار برنامه شما کمک می کنند. نحوه دسترسی به آنها را از NestJS بیاموزید.
یک متغیر محیطی اطلاعاتی را در مورد محیطی که یک فرآیند در آن اجرا می شود ارائه می دهد. آنها پورت های سرور و اتصالات پایگاه داده را پیکربندی می کنند، داده های حساس مانند کلیدهای API و موارد دیگر را پنهان می کنند.
روش NestJS برای خواندن متغیرهای محیطی با بسته استاندارد dotenv NodeJS متفاوت است.
ماژول پیکربندی NestJS به شما امکان می دهد متغیرهای محیط خود را تنها در چند مرحله مدیریت کنید.
مرحله 1: نصب Dependencies
NestJS یک بسته اختصاصی @nestjs/config را ارائه می دهد که از بسته dotenv در زیر هود استفاده می کند. این بسته وابستگی صفر متغیرهای محیطی را از یک فایل .env در process.env بارگیری می کند. شی process.env یک متغیر سراسری است که در زمان اجرا برای استفاده برنامه شما تزریق می شود.
بسته پیکربندی NestJS را با اجرای:
npm install @nestjs/config
بسته پیکربندی NestJS با نمایش یک ماژول پیکربندی و یک سرویس پیکربندی در برنامه کار می کند. ماژول پیکربندی فایل .env را برای خواندن برنامه مشخص می کند. در همان زمان، سرویس پیکربندی اطلاعات داخل فایل .env را در معرض بقیه برنامه قرار می دهد.
مرحله 2: ایجاد فایل های ENV
ذخیره متغیرهای محیطی در یک فایل به شما امکان می دهد به راحتی از هر زبانی و در سیستم عامل های مختلف به آنها دسترسی داشته باشید. شما می توانید این فایل های .env را نسخه کنترل کنید، بنابراین قابلیت حمل پروژه را افزایش می دهند و می توانند مشکلات اشکال زدایی را کاهش دهند.
رویکرد NestJS برای ایجاد فایلهای env. با توصیه رسمی dotenv متفاوت است. با توجه به مستندات dotenv، شما نباید بیش از یک فایل .env در یک برنامه ایجاد کنید. NestJS به شما امکان می دهد چندین فایل .env با نام های مختلف ایجاد کنید.
به عنوان تمرین خوب، همیشه باید فایلهای .env را در فهرست اصلی پروژه خود ایجاد کنید و آنها را در فایل gitignore. خود قرار دهید.
هیچ راه خاصی برای ایجاد یک فایل .env وجود ندارد – فقط کافی است آنها را با ویرایشگر متن معمولی خود ایجاد و ویرایش کنید – اما آنها باید با .env شروع شوند. به عنوان مثال، .env.development.
مرحله 3: تنظیم ماژول پیکربندی
برای راهاندازی ماژول پیکربندی به صورت سراسری و تعیین مسیرهای env. مرحله زیر را دنبال کنید:
- در فایل ماژول ریشه (app.modue.ts) پروژه خود، ConfigModule را از @nestjs/config وارد کنید.
- ConfigModule را به آرایه imports خود اضافه کنید و متد forRoot را روی آن فراخوانی کنید.
- یک آبجکت پیکربندی را به متد forRoot با خاصیت isGlobal به true ارسال کنید. این گزینه پیکربندی را از طریق ماژول های دیگر در برنامه شما به اشتراک می گذارد، به این معنی که لازم نیست آن را بیش از یک بار تنظیم کنید.
- envFilePath خود را در شیء پیکربندی خود مشخص کنید. این ویژگی می تواند یک رشته باشد (اگر یک فایل .env دارید) یا یک آرایه حاوی تمام فایل های .env شما و به ماژول پیکربندی می گوید که کدام فایل ها را جستجو کند.
// app.module.ts
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: 'Name(s) of your .env file(s)',
}),
مرحله 4: استفاده از سرویس Config برای خواندن متغیرهای محیطی
برای دسترسی به مقادیر پیکربندی با وارد کردن ConfigService از @nestjs/config شروع کنید. با اعلام یک متغیر خصوصی و اختصاص ConfigService به عنوان نوع آن، آن را به سازنده کلاس تزریق کنید.
مثلا:
constructor(private config: ConfigService) {}
برای دسترسی به یک متغیر، متد get را در ConfigService روی متغیر خصوصی خود فراخوانی کنید. نوع داده ای را که به عنوان یک عمومی نیاز دارید و نام متغیر محیطی که می خواهید به آن دسترسی داشته باشید، ارسال کنید.
مثلا:
const envVar = this.config.get<string>('ENV_VALUE');
ConfigService به دنبال مقداری با نام “ENV_VALUE” می گردد و مقدار آن را برمی گرداند.
توجه داشته باشید که اگر دو فایل .env دارای نام خاصیت یکسان باشند، اولین مورد مشخص شده در envFilePath اولویت خواهد داشت.
اهمیت متغیرهای محیطی
متغیرهای محیطی بخش اساسی یک برنامه هستند، به ویژه در برنامه های پیچیده تر. آنها به شما اجازه می دهند پیکربندی برنامه خود را از طریق یک مکانیسم ساده و معمولی کنترل کنید.
شما می توانید از متغیرهای محیطی برای کنترل تمام جنبه های پیکربندی استفاده کنید. از تنظیمات مختلف پایگاه داده گرفته تا داده های حساس مانند کلیدهای API و اعتبارنامه ها، آنها به شما اجازه می دهند پیکربندی را بدون دست زدن به کد منبع اصلی تغییر دهید.