Bird
Raised Fist0
NestJSframework~20 mins

ConfigModule setup in NestJS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
ConfigModule Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What is the output of this ConfigModule setup code?
Consider this NestJS module setup using ConfigModule. What will be the value of configService.get('APP_NAME') inside AppService?
NestJS
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      load: [() => ({ APP_NAME: 'NestApp' })],
    }),
  ],
  providers: [
    {
      provide: 'APP_SERVICE',
      useFactory: (configService: ConfigService) => {
        return { appName: configService.get('APP_NAME') };
      },
      inject: [ConfigService],
    },
  ],
  exports: ['APP_SERVICE'],
})
export class AppModule {}
Anull
B'NestApp'
Cundefined
DThrows error: ConfigService not found
Attempts:
2 left
💡 Hint
Remember that ConfigModule.forRoot with isGlobal: true makes the config available everywhere.
📝 Syntax
intermediate
2:00remaining
Which option correctly imports ConfigModule with environment variable support?
You want to load environment variables from a custom file .env.dev using ConfigModule. Which code snippet correctly sets this up?
AConfigModule.forRoot({ envPath: '.env.dev' })
BConfigModule.forRoot({ envFile: '.env.dev' })
CConfigModule.forRoot({ envFilePath: '.env.dev' })
DConfigModule.forRoot({ envFilePaths: ['.env.dev'] })
Attempts:
2 left
💡 Hint
Check the exact property name for specifying environment file path in ConfigModule options.
🔧 Debug
advanced
3:00remaining
Why does ConfigService return undefined for a variable?
Given this setup, why does configService.get('DATABASE_URL') return undefined? Code: import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; @Module({ imports: [ConfigModule.forRoot()], }) export class AppModule {} And the environment file .env contains: DATABASE_URL=postgres://user:pass@localhost/db But configService.get('DATABASE_URL') returns undefined.
AConfigService requires manual injection to work
BConfigModule.forRoot() requires explicit envFilePath to load .env
CDATABASE_URL is not a valid environment variable name
DThe .env file is not in the root directory where the app runs
Attempts:
2 left
💡 Hint
Check where the app expects the .env file to be located.
❓ state_output
advanced
2:30remaining
What is the output of this ConfigModule async setup?
Consider this async configuration setup for ConfigModule. What will configService.get('API_KEY') return? Code: import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, load: [async () => { return new Promise(resolve => { setTimeout(() => resolve({ API_KEY: '12345' }), 100); }); }], }), ], }) export class AppModule {}
Aundefined
B'12345'
CPromise { <pending> }
DThrows error: Async load not supported
Attempts:
2 left
💡 Hint
Check if ConfigModule supports async functions in load array.
🧠 Conceptual
expert
3:00remaining
Which option correctly explains ConfigModule global behavior?
You want to use ConfigService in multiple modules without importing ConfigModule repeatedly. Which statement about ConfigModule.forRoot({ isGlobal: true }) is true?
AIt registers ConfigModule once globally, so all modules can inject ConfigService without importing ConfigModule again
BIt requires importing ConfigModule in every module to access ConfigService despite isGlobal: true
CIt disables ConfigService injection to force manual config passing
DIt only works if ConfigModule is imported in the root module explicitly
Attempts:
2 left
💡 Hint
Think about what 'global' means in NestJS modules.

Practice

(1/5)
1. What is the main purpose of ConfigModule in a NestJS application?
easy
A. To manage application settings using environment variables
B. To handle HTTP requests and responses
C. To connect to a database
D. To create middleware for logging

Solution

  1. Step 1: Understand ConfigModule role

    The ConfigModule is designed to load and manage configuration settings, often from environment variables.
  2. Step 2: Compare with other options

    Options A, B, and D relate to other parts of NestJS like database connections, HTTP handling, and middleware, not configuration management.
  3. Final Answer:

    To manage application settings using environment variables -> Option A
  4. Quick Check:

    ConfigModule = Manage app settings [OK]
Hint: ConfigModule is for app settings, not HTTP or DB [OK]
Common Mistakes:
  • Confusing ConfigModule with database modules
  • Thinking ConfigModule handles HTTP requests
  • Assuming ConfigModule creates middleware
2. Which is the correct way to import ConfigModule globally in the root module?
easy
A. ConfigModule.register({ global: true })
B. ConfigModule.forFeature({ isGlobal: true })
C. ConfigModule.forRoot({ isGlobal: true })
D. ConfigModule.global()

Solution

  1. Step 1: Recall ConfigModule global setup syntax

    To make ConfigModule available app-wide, use forRoot() with isGlobal: true.
  2. Step 2: Check other options for correctness

    forFeature() is for scoped configs, register() and global() are not valid methods here.
  3. Final Answer:

    ConfigModule.forRoot({ isGlobal: true }) -> Option C
  4. Quick Check:

    Global config = forRoot + isGlobal true [OK]
Hint: Use forRoot with isGlobal true for global config [OK]
Common Mistakes:
  • Using forFeature instead of forRoot
  • Trying to use non-existent methods like global()
  • Confusing register with forRoot
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 DATABASE_HOST is set to "localhost" in the environment?
medium
A. Throws an error
B. undefined
C. null
D. "localhost"

Solution

  1. Step 1: Understand ConfigService.get behavior

    The get method returns the value of the environment variable if set, here 'localhost'.
  2. Step 2: Check environment variable presence

    Since DATABASE_HOST is set to 'localhost', the method returns that string, not undefined or null.
  3. Final Answer:

    "localhost" -> Option D
  4. Quick Check:

    Env var set = get returns value [OK]
Hint: get() returns env value if set, else undefined [OK]
Common Mistakes:
  • Assuming get returns null if variable exists
  • Expecting an error if variable is missing
  • Confusing undefined with null
4. Identify the error in this NestJS module setup:
@Module({
  imports: [ConfigModule.forRoot({ isGlobal: true })],
  providers: [ConfigService],
})
export class AppModule {}
medium
A. ConfigService should not be listed in providers when ConfigModule is global
B. Missing import of ConfigService from '@nestjs/config'
C. forRoot() should not have isGlobal option
D. ConfigModule should be imported in controllers, not imports

Solution

  1. Step 1: Understand global ConfigModule behavior

    When isGlobal: true is set, ConfigService is automatically provided app-wide, no need to add it manually.
  2. Step 2: Check other options for validity

    Importing ConfigService is not mandatory in module file, forRoot supports isGlobal, and ConfigModule belongs in imports array.
  3. Final Answer:

    ConfigService should not be listed in providers when ConfigModule is global -> Option A
  4. Quick Check:

    Global ConfigModule auto-provides ConfigService [OK]
Hint: Don't add ConfigService to providers if ConfigModule is global [OK]
Common Mistakes:
  • Adding ConfigService to providers unnecessarily
  • Thinking isGlobal is invalid option
  • Placing ConfigModule in controllers array
5. You want to load a custom configuration file named custom.env using ConfigModule and make it global. Which setup is correct?
hard
A. ConfigModule.forRoot({ envFileName: 'custom.env', global: true })
B. ConfigModule.forRoot({ envFilePath: 'custom.env', isGlobal: true })
C. ConfigModule.forFeature({ envFilePath: 'custom.env', isGlobal: true })
D. ConfigModule.register({ envFilePath: 'custom.env', isGlobal: true })

Solution

  1. Step 1: Identify correct option names for ConfigModule

    The correct option to specify a custom env file is envFilePath, and to make it global use isGlobal: true inside forRoot().
  2. Step 2: Eliminate incorrect options

    envFileName and global are invalid option names; forFeature and register are not used for global config loading.
  3. Final Answer:

    ConfigModule.forRoot({ envFilePath: 'custom.env', isGlobal: true }) -> Option B
  4. Quick Check:

    Custom env + global = envFilePath + isGlobal true [OK]
Hint: Use envFilePath and isGlobal in forRoot for custom global config [OK]
Common Mistakes:
  • Using envFileName instead of envFilePath
  • Trying to use forFeature for global config
  • Using register instead of forRoot
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