Bird
Raised Fist0
NestJSframework~20 mins

Cache interceptor in NestJS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Cache Interceptor Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
How does NestJS CacheInterceptor affect response caching?

Consider a NestJS controller method decorated with @UseInterceptors(CacheInterceptor). What is the behavior of this interceptor when the method is called multiple times with the same parameters?

NestJS
import { Controller, Get, UseInterceptors } from '@nestjs/common';
import { CacheInterceptor } from '@nestjs/cache-manager';

@Controller('items')
@UseInterceptors(CacheInterceptor)
export class ItemsController {
  @Get()
  findAll() {
    console.log('Fetching items from DB');
    return ['item1', 'item2'];
  }
}
AThe interceptor causes an error because caching requires manual cache setup in the controller.
BThe first call logs 'Fetching items from DB' and returns the array; subsequent calls return cached data without logging.
CThe interceptor caches the response but still logs 'Fetching items from DB' on every call.
DEvery call logs 'Fetching items from DB' and returns fresh data; caching is disabled by default.
Attempts:
2 left
💡 Hint

Think about how caching avoids repeated work and what the console output tells you.

📝 Syntax
intermediate
2:00remaining
Which code correctly applies CacheInterceptor globally in NestJS?

You want to enable caching for all controllers in your NestJS app using CacheInterceptor. Which code snippet correctly sets this up in main.ts?

Aapp.useGlobalInterceptors(new CacheInterceptor());
Bapp.useGlobalInterceptors(new CacheInterceptor(app));
Capp.useGlobalInterceptors(CacheInterceptor());
Dapp.useGlobalInterceptors(CacheInterceptor);
Attempts:
2 left
💡 Hint

Remember how to instantiate classes and pass them to global interceptors.

🔧 Debug
advanced
2:00remaining
Why does CacheInterceptor not cache responses for POST requests?

Given this controller method:

  @Post('create')
  @UseInterceptors(CacheInterceptor)
  createItem() {
    return { success: true };
  }

Why does the CacheInterceptor not cache the response for this POST request?

ACacheInterceptor caches all HTTP methods equally; the issue is elsewhere.
BPOST requests require manual cache key setup; otherwise, caching is disabled.
CCacheInterceptor only caches GET requests by default; POST requests are excluded.
DThe interceptor throws an error on POST requests and skips caching.
Attempts:
2 left
💡 Hint

Think about HTTP methods and typical caching rules.

🧠 Conceptual
advanced
2:00remaining
What happens if CacheInterceptor is used without a cache manager provider?

You apply CacheInterceptor in a NestJS app but forget to import CacheModule. What will happen when a cached route is called?

AThe CacheInterceptor caches responses but clears cache immediately after.
BThe CacheInterceptor silently skips caching and returns fresh data every time.
CThe app logs a warning but caches responses in memory by default.
DThe app throws a runtime error because CacheInterceptor depends on CacheModule provider.
Attempts:
2 left
💡 Hint

Consider dependency injection and required modules in NestJS.

❓ state_output
expert
2:00remaining
What is the cache key generated by CacheInterceptor for a GET request with query params?

Given this controller method:

  @Get('search')
  @UseInterceptors(CacheInterceptor)
  search(@Query('term') term: string) {
    return { results: [term] };
  }

When a client calls /search?term=book, what cache key does CacheInterceptor use internally?

AThe full URL path including query string, e.g., '/search?term=book'
BOnly the route path without query, e.g., '/search'
CA hash of the response body content
DThe HTTP method plus route path, e.g., 'GET:/search'
Attempts:
2 left
💡 Hint

Think about how caching differentiates requests with different query parameters.

Practice

(1/5)
1. What is the main purpose of the CacheInterceptor in NestJS?
easy
A. To handle authentication and authorization
B. To store responses and speed up repeated requests
C. To log all incoming requests
D. To format response data before sending

Solution

  1. Step 1: Understand the role of CacheInterceptor

    The CacheInterceptor caches HTTP responses to avoid recomputing them on repeated requests.
  2. Step 2: Compare with other options

    Logging, authentication, and formatting are handled by other interceptors or middleware, not CacheInterceptor.
  3. Final Answer:

    To store responses and speed up repeated requests -> Option B
  4. Quick Check:

    CacheInterceptor caches responses = C [OK]
Hint: CacheInterceptor caches responses to speed up requests [OK]
Common Mistakes:
  • Confusing CacheInterceptor with logging interceptors
  • Thinking it handles security tasks
  • Assuming it formats data
2. Which of the following is the correct way to apply the CacheInterceptor to a controller method in NestJS?
easy
A. Add CacheInterceptor in the constructor of the controller
B. @Cacheable() decorator on the method
C. @UseInterceptors(CacheInterceptor) above the method
D. Use @CacheInterceptor() as a method parameter

Solution

  1. Step 1: Recall how to apply interceptors in NestJS

    Interceptors are applied using the @UseInterceptors() decorator above methods or controllers.
  2. Step 2: Check each option

    Only @UseInterceptors(CacheInterceptor) above the method uses the correct decorator syntax. Options B, C, and D are invalid or do not exist in NestJS.
  3. Final Answer:

    @UseInterceptors(CacheInterceptor) above the method -> Option C
  4. Quick Check:

    UseInterceptors decorator = A [OK]
Hint: Use @UseInterceptors(CacheInterceptor) to apply caching [OK]
Common Mistakes:
  • Using non-existent @Cacheable decorator
  • Trying to inject interceptor in constructor
  • Passing interceptor as method parameter
3. Given this code snippet, what will be the output on the second request to /hello?
import { Controller, Get, UseInterceptors } from '@nestjs/common';
import { CacheInterceptor } from '@nestjs/cache-manager';

@Controller()
export class HelloController {
  private count = 0;

  @UseInterceptors(CacheInterceptor)
  @Get('hello')
  getHello() {
    this.count++;
    return `Hello count: ${this.count}`;
  }
}
medium
A. "Hello count: 1" first request, "Hello count: 2" second request
B. Error because count is private
C. "Hello count: 0" on both requests
D. "Hello count: 1" on first and second request

Solution

  1. Step 1: Understand CacheInterceptor behavior

    CacheInterceptor caches the response of the first request and returns it for subsequent requests without calling the method again.
  2. Step 2: Analyze the count variable increment

    On the first request, count increments to 1 and returns "Hello count: 1". On the second request, the cached response is returned, so count does not increment again.
  3. Final Answer:

    "Hello count: 1" on first and second request -> Option D
  4. Quick Check:

    Cache returns cached response = B [OK]
Hint: CacheInterceptor returns cached response, method not re-executed [OK]
Common Mistakes:
  • Assuming count increments on every request
  • Thinking private variables cause errors here
  • Ignoring caching effect on method execution
4. Identify the error in this NestJS CacheInterceptor usage:
import { Controller, Get, UseInterceptors } from '@nestjs/common';
import { CacheInterceptor } from '@nestjs/cache-manager';

@Controller()
export class TestController {
  @UseInterceptors(CacheInterceptor())
  @Get('test')
  test() {
    return 'Test response';
  }
}
medium
A. CacheInterceptor should not be called as a function
B. Missing CacheModule import in the controller
C. Method test must be async to use CacheInterceptor
D. CacheInterceptor must be applied globally, not per method

Solution

  1. Step 1: Check how CacheInterceptor is applied

    CacheInterceptor is a class, not a function, so it should be passed without parentheses to @UseInterceptors().
  2. Step 2: Verify other options

    CacheModule import is required but not shown here (not an error in this snippet). Method does not need to be async. CacheInterceptor can be applied per method.
  3. Final Answer:

    CacheInterceptor should not be called as a function -> Option A
  4. Quick Check:

    Use class name without () = A [OK]
Hint: Pass CacheInterceptor class, not call it as function [OK]
Common Mistakes:
  • Calling CacheInterceptor with parentheses
  • Assuming method must be async
  • Thinking CacheModule import error here
5. You want to customize the cache key for a route in NestJS using CacheInterceptor. Which approach correctly achieves this?
hard
A. Extend CacheInterceptor and override the trackBy method to return a custom key
B. Pass a custom key string directly to @UseInterceptors(CacheInterceptor)
C. Set a custom key in the controller constructor
D. Use @CacheKey('customKey') decorator on the method

Solution

  1. Step 1: Understand how to customize cache keys

    CacheInterceptor allows customization by extending it and overriding the trackBy method to define how keys are generated.
  2. Step 2: Evaluate other options

    Passing a string to @UseInterceptors() is invalid. Setting keys in constructor or using @CacheKey decorator does not exist in NestJS.
  3. Final Answer:

    Extend CacheInterceptor and override the trackBy method to return a custom key -> Option A
  4. Quick Check:

    Override trackBy method = D [OK]
Hint: Override trackBy method in extended CacheInterceptor [OK]
Common Mistakes:
  • Trying to pass key directly to decorator
  • Using non-existent @CacheKey decorator
  • Setting keys in constructor instead of method
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