Installation

image.png

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { HelloModule } from './hello/hello.module';
import { UserModule } from './user/user.module';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [HelloModule, UserModule, ConfigModule.forRoot({ isGlobal: true })],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
// Now it is aceessible and we can load env variables
// now we are using env in app.service.ts

import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';

@Injectable()
export class AppService {
  constructor(private readonly configService: ConfigService) {}

  getHello(): string {
    const appName = this.configService.get<string>('APP_NAME', 'default_value');
    return `Hello from ${appName}!`;
  }
}

output -

image.png

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { HelloModule } from './hello/hello.module';
import { UserModule } from './user/user.module';
import { ConfigModule } from '@nestjs/config';
import z from 'zod';

@Module({
  imports: [
    HelloModule,
    UserModule,
    ConfigModule.forRoot({
      isGlobal: true,
      validationSchema: z.object({
        APP_NAME: z.string().default('defaultAPP'),
      }),
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

export default () => ({
  appName: process.env.APP_NAME || 'MYNESTAPP',
});

// app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { HelloModule } from './hello/hello.module';
import { UserModule } from './user/user.module';
import { ConfigModule } from '@nestjs/config';
import appConfig from './config/app.config';
// import z from 'zod';

@Module({
  imports: [
    HelloModule,
    UserModule,
    ConfigModule.forRoot({
      isGlobal: true,
      // validationSchema: z.object({
      //   APP_NAME: z.string().default('defaultAPP'),
      // }),
      load: [appConfig],
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

// app.service.ts
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';

@Injectable()
export class AppService {
  constructor(private readonly configService: ConfigService) {}

  getHello(): string {
    const appName = this.configService.get<string>('appName');
    return `Hello from ${appName}!`;
  }
}