DEV Community

Gabriel Dias Mazieri
Gabriel Dias Mazieri

Posted on

8 2 3 2 2

How to set up .env variables in a Nest.js project

As you problably should know, nest.js provides everything for you, it is a complete node.js framework and as expected also provides resources to set up environment variables for your api.

as always, the documentations is your friend, read more here: Configuration Nest.js docs

Here's how:

Nest.js provides a dependency exclusively for environment variables:

just install it:

npm i --save @nestjs/config

Now how to configure:

at your .env file you should have a PORT variable declared

PORT=3000
REDIS_PORT=6379
REDIS_HOST=localhost
Enter fullscreen mode Exit fullscreen mode

Create a config file as you prefer
src/config/config.ts:

export const config = () => ({
  port: process.env.PORT || 3000,
  redis_host: process.env.REDIS_HOST || 'localhost',
  redis_port: process.env.REDIS_PORT || 6379,
})
Enter fullscreen mode Exit fullscreen mode

at your app.module.ts:

import { config } from 'src/config/config';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      load: [config],
    }),
})
Enter fullscreen mode Exit fullscreen mode

Here we are declaring our configuration as global, so all this will be applied to the whole Nest.js application, and all the configuration will be loaded from our config file, that should be imported as well.

Now, how to use our configuration?
Just instantiate your configuration at main.ts or anywhere you want or inject at any module you want to use.

Here's how to instantiate:

main.ts

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

async function bootstrap() {
  const configService = app.get(ConfigService);
  const port = configService.get('port'); // nest.js will handle the port variable from your .env file
}
Enter fullscreen mode Exit fullscreen mode

And,
How to inject at any module:

import { ConfigModule, ConfigService } from '@nestjs/config';

@Module({
  imports: [
    BullModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: async (configService: ConfigService) => ({
        redis: {
          host: configService.get<string>('redis_host'),
          port: configService.get<number>('redis_port'),
        },
      }),
      inject: [ConfigService],
    }),
Enter fullscreen mode Exit fullscreen mode

Here I'm using Nest.js bull module because if your're configuring an environment variable at a custom module, you'll probably configuring some service for your application, mines using redis for queues service.

Image of Datadog

Master Mobile Monitoring for iOS Apps

Monitor your app’s health with real-time insights into crash-free rates, start times, and more. Optimize performance and prevent user churn by addressing critical issues like app hangs, and ANRs. Learn how to keep your iOS app running smoothly across all devices by downloading this eBook.

Get The eBook

Top comments (1)

Collapse
 
natanb4 profile image
Natã Barbosa

Nice!

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay