Custom interceptors

In this lesson, we’ll explore how to create and use a custom interceptor in NestJS. Custom interceptors are a powerful tool for adding cross-cutting concerns to our application, such as logging, data transformation, and error handling. We can customize them to fit the specific needs and apply them to specific routes or globally within the NestJS application.

Implement a custom interceptor—ResponseInterceptor

Next, we’ll implement ResponseInterceptor, which manipulates the request and response. We want to achieve the following:

  • Provide a standardized response object. The response structure will be as follows:

    • data: This field contains the original response data from the route handler.

    • status: This field stores the HTTP status code of the response.

    • success: This field is a boolean flag indicating the success of the response.

    • error: This field is an error object set to null for successful responses.

  • Convert the properties of the incoming request to camel case.

Before we start working on ResponseInterceptor, let’s explore the NestInterceptor interface. In NestJS, interceptors must implement the NestInterceptor interface to define their interception logic. Understanding the NestInterceptor interface is essential when building custom interceptors that align with the requirements of our application.

The NestInterceptor interface

The NestInterceptor interface requires the implementation of the intercept method. This method is where the interception logic is defined. It takes the following two parameters:

  • context: This parameter is of the ExecutionContext type. It contains details about the route, request, and response objects. We can use this context to access and modify the request and response data.

  • next: This parameter is a function we must call to proceed with the request. It represents the next step in the request processing pipeline. We can call it to pass control to the route handler or the next interceptor in the chain. It is asynchronous and returns an observable.

For example, the following MyInterceptor class implements the NestInterceptor interface:

Get hands-on with 1200+ tech skills courses.