DEV Community

Tamim Ikbal
Tamim Ikbal

Posted on

1

How to Set Up Custom Configuration Files in NestJS

Hello my friends, I Hope you are all doing well. Today we will learn how to set up the custom config file in nestjs.

NestJS is a powerful JavaScript framework that provides all the essential functionalities needed for building scalable applications. However, it's not fully structured, you need to organize it yourself. While NestJS provides recommendations, it's up to us to implement a clean and maintainable configuration setup.

In this guide, we will set up a custom configuration file to keep our application settings structured and easy to manage. Let’s get started!

Let's say you have an env file with some different type of variable, for example:

APP_NAME=Laravel
APP_ENV=local
APP_TIMEZONE=UTC

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
Enter fullscreen mode Exit fullscreen mode

Now, We can get and use them by process.env in our js code which is not ideal for production because of performance, security, and caching.

So, let’s create a config file for them but here also we shouldn't tie them into one file then we will break SRP and this will be harder to manage. So, let's do this step by step.

1. Creating our NestJS Project

To create a NestJs project, we need to run the following commands in our terminal.

npm i -g @nestjs/cli
nest new project-name
Enter fullscreen mode Exit fullscreen mode

2. Install Nestjs Config

npm i --save @nestjs/config
Enter fullscreen mode Exit fullscreen mode

3. Make the configuration file

Create the respective configuration files in the src/config folder. In this case, app.config.js and database.config.js.

4. Write the Config File

app.config.js

import * as process from 'node:process';
import { registerAs } from '@nestjs/config';

const config = () => ({
  name: process.env.APP_NAME || 'NestApp',
  env: process.env.APP_ENV || 'production',
  debug: process.env.APP_DEBUG === 'true',
  timezone: process.env.APP_TIMEZONE || 'UTC',
  locale: process.env.APP_LOCALE || 'en',
});

export default registerAs('app', config);
Enter fullscreen mode Exit fullscreen mode

database.config.js

import * as process from 'node:process';
import { registerAs } from '@nestjs/config';

const config = () => ({
  database: process.env.DB_CONNECTION || 'mysql',
  connection: {
    mysql: {
      type: 'mysql',
      host: process.env.DB_HOST || 'localhost',
      port: parseInt(process.env.DB_PORT, 10) || 3306,
      username: process.env.DB_USERNAME || 'root',
      password: process.env.DB_PASSWORD || '',
      database: process.env.DB_NAME || '',
      entities: ['./../Models/*.entity{.ts,.js}'],
      migrations: ['./../database/migrations/*{.ts,.js}'],
      synchronize: false,
      migrationsRun: false,
      logging: process.env.DB_LOGGING === 'true',
    },
  },
});

export default registerAs('database', config);
Enter fullscreen mode Exit fullscreen mode
Explanation

We define a configuration object and export it using nestjs registerAs(), which provides a namespace (prefix) for the configuration to avoid conflict between config key.

5. Import and Setup the ConfigModule

app.module.ts

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import appConfig from './config/app.config';
import databaseConfig from './config/database.config';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true, // Makes config accessible throughout the application
      load: [appConfig, databaseConfig],
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}
Enter fullscreen mode Exit fullscreen mode

6. Using Config Values in the Application

app.service.ts

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

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

  getHello(): string {
    console.log(this.config.get('app.name')); // Fetching APP_NAME from config
    return 'Hello World!';
  }
}
Enter fullscreen mode Exit fullscreen mode

That’s it! Now you have a powerful and organized configuration setup in NestJS. 🚀

Thanks for reading! 🙌

To Read more about Nest COnfig Please Visit: https://docs.nestjs.com/techniques/configuration

Quadratic AI

Quadratic AI – The Spreadsheet with AI, Code, and Connections

  • AI-Powered Insights: Ask questions in plain English and get instant visualizations
  • Multi-Language Support: Seamlessly switch between Python, SQL, and JavaScript in one workspace
  • Zero Setup Required: Connect to databases or drag-and-drop files straight from your browser
  • Live Collaboration: Work together in real-time, no matter where your team is located
  • Beyond Formulas: Tackle complex analysis that traditional spreadsheets can't handle

Get started for free.

Watch The Demo 📊✨

Top comments (0)

Image of DataStax

AI Agents Made Easy with Langflow

Connect models, vector stores, memory and other AI building blocks with the click of a button to build and deploy AI-powered agents.

Get started for free

👋 Kindness is contagious

Explore a trove of insights in this engaging article, celebrated within our welcoming DEV Community. Developers from every background are invited to join and enhance our shared wisdom.

A genuine "thank you" can truly uplift someone’s day. Feel free to express your gratitude in the comments below!

On DEV, our collective exchange of knowledge lightens the road ahead and strengthens our community bonds. Found something valuable here? A small thank you to the author can make a big difference.

Okay