Practice
1. What is the main purpose of a
LoggingInterceptor in a NestJS application?easy
Solution
Step 1: Understand the role of interceptors
Interceptors in NestJS run code before and after request handlers, often used for logging or modifying requests/responses.Step 2: Identify the purpose of LoggingInterceptor
A LoggingInterceptor specifically tracks and logs request and response details for debugging and monitoring.Final Answer:
To log details about incoming requests and outgoing responses -> Option CQuick Check:
LoggingInterceptor = logs requests/responses [OK]
Hint: LoggingInterceptor logs request and response info [OK]
Common Mistakes:
- Confusing interceptors with middleware
- Thinking interceptors handle authentication
- Assuming interceptors serve static files
2. Which of the following is the correct way to implement the
intercept method in a NestJS LoggingInterceptor?easy
Solution
Step 1: Recall the intercept method signature
The intercept method receives two parameters:contextandnext. It must returnnext.handle()to continue the request lifecycle.Step 2: Check each option for correct syntax
intercept(context, next) { return next.handle(); } correctly uses both parameters and returnsnext.handle(). Options A, C, and D either miss parameters or do not return the observable.Final Answer:
intercept(context, next) { return next.handle(); } -> Option AQuick Check:
intercept(context, next) returns next.handle() [OK]
Hint: intercept always returns next.handle() with both parameters [OK]
Common Mistakes:
- Omitting return statement
- Missing one of the parameters
- Calling handle on wrong object
3. Given this LoggingInterceptor code snippet, what will be logged when a request is handled?
intercept(context, next) {
const now = Date.now();
return next.handle().pipe(
tap(() => console.log(`Request took ${Date.now() - now}ms`))
);
}medium
Solution
Step 1: Analyze the timing logic
The code records the current time before the request is handled, then logs the difference after the response is sent.Step 2: Understand the logged message
The console.log outputs "Request took Xms" where X is the elapsed time in milliseconds.Final Answer:
Logs the time taken to process the request in milliseconds -> Option AQuick Check:
LoggingInterceptor measures request duration [OK]
Hint: Look for Date.now() difference to find elapsed time [OK]
Common Mistakes:
- Assuming it logs request URL or body
- Thinking it logs errors only
- Ignoring the timing calculation
4. Identify the error in this LoggingInterceptor code:
intercept(context, next) {
const now = Date.now();
next.handle().pipe(
tap(() => console.log(`Request took ${Date.now() - now}ms`))
);
}medium
Solution
Step 1: Check the intercept method return
The intercept method must return the observable fromnext.handle()to continue the request lifecycle.Step 2: Identify missing return
The code callsnext.handle().pipe(...)but does not return it, so the request will not proceed properly.Final Answer:
Missing return statement before next.handle() -> Option DQuick Check:
intercept must return next.handle() observable [OK]
Hint: Always return next.handle() in intercept method [OK]
Common Mistakes:
- Forgetting to return the observable
- Misusing Date.now() for timing
- Ignoring required parameters
5. You want to create a LoggingInterceptor that logs the request method, URL, and the time taken for each request. Which code snippet correctly implements this behavior?
hard
Solution
Step 1: Access request object correctly
Usecontext.switchToHttp().getRequest()to get the HTTP request object in NestJS interceptors.Step 2: Use tap operator for side effects
Thetapoperator is used to perform logging without altering the response stream. Usingmaporconsole.erroris incorrect here.Final Answer:
intercept(context, next) { const req = context.switchToHttp().getRequest(); const now = Date.now(); return next.handle().pipe( tap(() => console.log(`${req.method} ${req.url} - ${Date.now() - now}ms`)) ); } -> Option BQuick Check:
Use switchToHttp(), tap, and return next.handle() [OK]
Hint: Use switchToHttp().getRequest() and tap for logging [OK]
Common Mistakes:
- Not returning next.handle()
- Using map instead of tap
- Using console.error instead of console.log
- Incorrect request object access
