Bird
Raised Fist0
NestJSframework~20 mins

Environment-based configuration in NestJS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
NestJS Env Config Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
How does NestJS load environment variables with ConfigModule?

Consider this NestJS module setup:

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

@Module({
  imports: [ConfigModule.forRoot({ isGlobal: true })],
})
export class AppModule {}

What happens when the app starts?

ANestJS requires manual import of ConfigService in every module to access variables.
BNestJS ignores .env files and only uses system environment variables.
CNestJS reads variables from a .env file and makes them available globally via ConfigService.
DNestJS throws an error if .env file is missing, stopping the app.
Attempts:
2 left
💡 Hint

Think about what isGlobal: true means in ConfigModule.

📝 Syntax
intermediate
2:00remaining
Which code correctly accesses an environment variable in a NestJS service?

Given the ConfigService is injected, which code snippet correctly gets the DATABASE_URL variable?

NestJS
constructor(private configService: ConfigService) {}

getDbUrl() {
  // Which line is correct?
}
Areturn this.configService.getDatabaseUrl();
Breturn process.env.DATABASE_URL();
Creturn this.configService.env.DATABASE_URL;
Dreturn this.configService.get('DATABASE_URL');
Attempts:
2 left
💡 Hint

Check the official method to get env variables from ConfigService.

🔧 Debug
advanced
2:00remaining
Why does this NestJS app fail to load environment variables?

Look at this code snippet:

ConfigModule.forRoot({
  envFilePath: '.env.production',
  isGlobal: true,
});

The app does not load variables from .env.production. What is the likely cause?

AThe <code>isGlobal</code> option disables loading environment files.
BThe <code>envFilePath</code> path is relative to the process working directory, which may differ from the source file location.
CThe <code>ConfigModule</code> must be imported in every module to load env files.
DNestJS only supports <code>.env</code> files and ignores custom filenames.
Attempts:
2 left
💡 Hint

Consider where the app runs and where the file is located.

❓ state_output
advanced
2:00remaining
What is the value of config after this code runs?

Given this code:

ConfigModule.forRoot({
  load: [() => ({
    port: parseInt(process.env.PORT) || 3000,
    mode: process.env.MODE || 'dev',
  })],
  isGlobal: true,
});

// Assume process.env.PORT = '0', process.env.MODE is undefined

const config = configService.get('port');

What is the value of config?

A0
BNaN
C3000
Dundefined
Attempts:
2 left
💡 Hint

Remember how parseInt and || work with 0.

🧠 Conceptual
expert
3:00remaining
Which statement about NestJS environment configuration is TRUE?

Choose the correct statement about environment-based configuration in NestJS.

AConfigModule can load multiple environment files conditionally based on NODE_ENV using a custom function in envFilePath.
BConfigModule requires manual injection in every service to access environment variables.
CEnvironment variables must be declared in a TypeScript interface to be accessible via ConfigService.
DConfigService automatically reloads environment variables if the .env file changes during runtime.
Attempts:
2 left
💡 Hint

Think about how to load different env files for development and production.

Practice

(1/5)
1. What is the main purpose of using environment-based configuration in a NestJS application?
easy
A. To write more complex code logic
B. To hardcode all secrets inside the source files
C. To increase the size of the application
D. To change app settings without modifying the code

Solution

  1. Step 1: Understand environment-based configuration

    It allows changing settings like database URLs or API keys without changing the app code.
  2. Step 2: Identify the correct purpose

    Changing settings without code changes helps adapt the app to different environments easily.
  3. Final Answer:

    To change app settings without modifying the code -> Option D
  4. Quick Check:

    Environment config = change settings without code [OK]
Hint: Think: config changes without touching code [OK]
Common Mistakes:
  • Confusing config with code logic
  • Assuming config increases app size
  • Hardcoding secrets inside source files
2. Which NestJS module is used to load environment variables for configuration?
easy
A. ConfigModule
B. DatabaseModule
C. HttpModule
D. LoggerModule

Solution

  1. Step 1: Recall NestJS modules for config

    The ConfigModule is designed to load and manage environment variables.
  2. Step 2: Match module to purpose

    HttpModule handles HTTP, DatabaseModule handles DB, LoggerModule handles logs, so ConfigModule is correct.
  3. Final Answer:

    ConfigModule -> Option A
  4. Quick Check:

    ConfigModule loads env variables [OK]
Hint: ConfigModule = environment variables loader [OK]
Common Mistakes:
  • Choosing unrelated modules like HttpModule
  • Confusing ConfigModule with DatabaseModule
  • Assuming LoggerModule manages config
3. Given this code snippet in a NestJS service:
constructor(private configService: ConfigService) {}

getDbHost() {
  return this.configService.get('DATABASE_HOST');
}

What will getDbHost() return if the environment variable DATABASE_HOST is set to localhost?
medium
A. DATABASE_HOST
B. undefined
C. localhost
D. null

Solution

  1. Step 1: Understand ConfigService.get()

    This method returns the value of the environment variable key passed, here 'DATABASE_HOST'.
  2. Step 2: Check environment variable value

    The variable DATABASE_HOST is set to 'localhost', so get() returns 'localhost'.
  3. Final Answer:

    localhost -> Option C
  4. Quick Check:

    ConfigService.get('DATABASE_HOST') = 'localhost' [OK]
Hint: ConfigService.get returns env var value [OK]
Common Mistakes:
  • Expecting the key name instead of its value
  • Assuming undefined if variable exists
  • Confusing null with undefined
4. You wrote this code to load environment variables in NestJS:
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule.forRoot()],
})
export class AppModule {}

But your app crashes with an error saying environment variables are undefined. What is the likely cause?
medium
A. You must call ConfigService.get() inside main.ts only
B. You forgot to create a .env file or set environment variables
C. You need to import HttpModule as well
D. ConfigModule.forRoot() should be called inside a service, not module

Solution

  1. Step 1: Check environment variable source

    ConfigModule loads variables from .env file or system environment. If missing, variables are undefined.
  2. Step 2: Identify common mistake

    Not having a .env file or not setting variables causes undefined values and app crash.
  3. Final Answer:

    You forgot to create a .env file or set environment variables -> Option B
  4. Quick Check:

    Missing .env file = undefined env vars [OK]
Hint: Always create .env file or set env vars [OK]
Common Mistakes:
  • Thinking ConfigModule.forRoot() is misplaced
  • Assuming HttpModule is needed for config
  • Calling ConfigService.get() only in main.ts
5. You want to load different database URLs for development and production in NestJS using environment variables. Which approach correctly uses ConfigModule to load .env.development or .env.production based on NODE_ENV?
hard
A. ConfigModule.forRoot({ envFilePath: `.env.${process.env.NODE_ENV}` })
B. ConfigModule.forRoot({ envFilePath: '.env' })
C. ConfigModule.forRoot({ envFilePath: '.env.production' }) always
D. ConfigModule.forRoot({ envFilePath: '.env.development' }) always

Solution

  1. Step 1: Understand dynamic env file loading

    Using envFilePath with template string allows loading .env files based on NODE_ENV value.
  2. Step 2: Check options

    ConfigModule.forRoot({ envFilePath: `.env.${process.env.NODE_ENV}` }) dynamically loads .env.development or .env.production depending on NODE_ENV, others load fixed files.
  3. Final Answer:

    ConfigModule.forRoot({ envFilePath: `.env.${process.env.NODE_ENV}` }) -> Option A
  4. Quick Check:

    Dynamic envFilePath = correct multi-env config [OK]
Hint: Use template string with NODE_ENV for envFilePath [OK]
Common Mistakes:
  • Hardcoding envFilePath to one file always
  • Not using process.env.NODE_ENV in path
  • Assuming default .env handles all environments
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard