Bird
Raised Fist0
NestJSframework~5 mins

Health checks (Terminus) in NestJS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of health checks in a NestJS application using Terminus?
Health checks help monitor if the application and its dependencies are working correctly. Terminus provides easy ways to create these checks so the system can report its status.
Click to reveal answer
beginner
How do you add a simple HTTP health check endpoint using Terminus in NestJS?
You create a controller with the @HealthCheck() decorator and use the HealthCheckService to run built-in checks like HTTP or database checks. This endpoint returns the status of the app.
Click to reveal answer
intermediate
What is a 'readiness' health check and why is it important?
A readiness check tells if the app is ready to handle requests. It usually checks if dependencies like databases are connected. This helps load balancers send traffic only to ready instances.
Click to reveal answer
intermediate
Explain how Terminus integrates with NestJS dependency injection for custom health indicators.
You create a custom health indicator class that extends HealthIndicator. Then you inject it into your health controller to include custom checks in the health endpoint.
Click to reveal answer
intermediate
What is the difference between liveness and readiness probes in Terminus health checks?
Liveness probes check if the app is alive (not stuck or crashed). Readiness probes check if the app is ready to serve traffic (all dependencies are working). Both help Kubernetes manage app lifecycle.
Click to reveal answer
Which decorator is used to mark a health check endpoint in NestJS Terminus?
A@CheckHealth()
B@GetHealth()
C@HealthCheck()
D@Health()
What does a readiness probe typically check?
AIf the app dependencies are connected and ready
BIf the app process is running
CIf the server CPU is below 50%
DIf the app has received any requests
How do you add a custom health check in Terminus?
ACreate a custom HealthIndicator class and inject it
BOverride the default health controller
CUse @CustomHealth() decorator
DModify the main.ts file
Which service runs the health checks in a Terminus controller?
AHealthService
BHealthCheckService
CTerminusService
DCheckService
What HTTP status code does a healthy Terminus endpoint usually return?
A302 Redirect
B404 Not Found
C500 Internal Server Error
D200 OK
Describe how you would implement a basic health check endpoint in a NestJS app using Terminus.
Think about the steps from module setup to controller method.
You got /5 concepts.
    Explain the difference between liveness and readiness probes and why both are useful in a cloud environment.
    Consider how Kubernetes uses these probes.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using Terminus in a NestJS application?
      easy
      A. To handle user authentication and authorization
      B. To add health checks that monitor if the app and its parts are working well
      C. To manage database migrations automatically
      D. To optimize the app's performance by caching responses

      Solution

      1. Step 1: Understand Terminus role in NestJS

        Terminus is a tool designed to add health checks to monitor app status.
      2. Step 2: Compare options with Terminus purpose

        Only To add health checks that monitor if the app and its parts are working well describes health checks, which is Terminus's main use.
      3. Final Answer:

        To add health checks that monitor if the app and its parts are working well -> Option B
      4. Quick Check:

        Terminus = Health checks [OK]
      Hint: Terminus is about health checks, not auth or caching [OK]
      Common Mistakes:
      • Confusing Terminus with authentication libraries
      • Thinking Terminus manages database tasks
      • Assuming Terminus improves performance directly
      2. Which of the following is the correct way to inject the HealthCheckService in a NestJS Terminus health check controller?
      easy
      A. constructor(private healthCheckService) {}
      B. constructor(public healthCheckService: HealthCheckService) {}
      C. constructor(private readonly healthCheckService: HealthCheckService) {}
      D. constructor(healthCheckService: HealthCheckService) {}

      Solution

      1. Step 1: Recall NestJS dependency injection syntax

        Use constructor with private readonly and type for proper injection.
      2. Step 2: Check each option's correctness

        constructor(private readonly healthCheckService: HealthCheckService) {} uses private readonly and type, which is correct. Others miss readonly, type, or access modifier.
      3. Final Answer:

        constructor(private readonly healthCheckService: HealthCheckService) {} -> Option C
      4. Quick Check:

        Inject with private readonly and type [OK]
      Hint: Use 'private readonly' with type for injection [OK]
      Common Mistakes:
      • Omitting access modifier (private/public)
      • Not specifying the type HealthCheckService
      • Using public instead of private readonly
      3. Given this NestJS Terminus health check code snippet, what will be the HTTP response status when the database is healthy?
      async check() {
        return this.healthCheckService.check([
          () => this.dbHealthIndicator.pingCheck('database')
        ]);
      }
      medium
      A. 200 OK with status 'ok' and details about database
      B. 500 Internal Server Error with failure details
      C. 404 Not Found because no route is defined
      D. 302 Redirect to another URL

      Solution

      1. Step 1: Understand healthCheckService.check behavior

        It returns 200 OK with status 'ok' if all checks pass.
      2. Step 2: Analyze the database pingCheck result

        If database is healthy, pingCheck passes, so overall status is 'ok'.
      3. Final Answer:

        200 OK with status 'ok' and details about database -> Option A
      4. Quick Check:

        Healthy check = 200 OK [OK]
      Hint: Healthy checks return 200 OK with status 'ok' [OK]
      Common Mistakes:
      • Assuming failure status on healthy database
      • Confusing route existence with health check response
      • Expecting redirects from health checks
      4. Identify the error in this NestJS Terminus health check controller code:
      @Controller('health')
      export class HealthController {
        constructor(private readonly healthCheckService: HealthCheckService) {}
      
        @Get()
        async check() {
          return this.healthCheckService.check([
            this.httpHealthIndicator.pingCheck('nestjs-docs', 'https://docs.nestjs.com')
          ]);
        }
      }
      medium
      A. Missing injection of HttpHealthIndicator in constructor
      B. Wrong HTTP method; should use @Post instead of @Get
      C. HealthCheckService is not imported
      D. Controller decorator is missing a path

      Solution

      1. Step 1: Check usage of httpHealthIndicator

        httpHealthIndicator is used but not injected or declared anywhere.
      2. Step 2: Verify constructor parameters

        Only healthCheckService is injected; httpHealthIndicator is missing.
      3. Final Answer:

        Missing injection of HttpHealthIndicator in constructor -> Option A
      4. Quick Check:

        Inject all indicators used [OK]
      Hint: Inject all health indicators you use [OK]
      Common Mistakes:
      • Forgetting to inject HttpHealthIndicator
      • Using wrong HTTP method for health checks
      • Assuming decorators need no path
      5. You want to create a custom health check in NestJS Terminus that checks both database connectivity and an external API availability. Which approach correctly combines these checks in one health endpoint?
      hard
      A. Call dbHealthIndicator.pingCheck inside httpHealthIndicator.pingCheck callback
      B. Create two separate controllers, one for database and one for API, each with its own healthCheckService
      C. Use only healthCheckService.check with dbHealthIndicator.pingCheck and ignore API check
      D. Use healthCheckService.check with an array of functions calling dbHealthIndicator.pingCheck and httpHealthIndicator.pingCheck

      Solution

      1. Step 1: Understand combining multiple checks

        healthCheckService.check accepts an array of async functions for multiple checks.
      2. Step 2: Verify correct usage of indicators

        Use dbHealthIndicator.pingCheck and httpHealthIndicator.pingCheck as separate functions in the array.
      3. Step 3: Evaluate other options

        Separate controllers or nesting checks is incorrect; ignoring API check misses requirement.
      4. Final Answer:

        Use healthCheckService.check with an array of functions calling dbHealthIndicator.pingCheck and httpHealthIndicator.pingCheck -> Option D
      5. Quick Check:

        Combine checks in array for one endpoint [OK]
      Hint: Pass all checks as functions array to healthCheckService.check [OK]
      Common Mistakes:
      • Splitting checks into multiple controllers unnecessarily
      • Nesting one check inside another incorrectly
      • Ignoring one of the required checks
      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