A Cheat Sheet for the Nest JS Request Pipeline
Tags: webdev, node, nestjs
Published: 2021-11-12 01:35:36

---
title: A Cheat Sheet for the Nest JS Request Pipeline
published: true
date: 12/11/2021
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sdzuv5lp5yl6u5btppc3.png
tags: #webdev,#nodejs,#nestjs
canonical_url: https://darraghoriordan.com/2021/11/03/nest-cheatsheet-interceptor-middleware-guard/
---

I'm always checking the NestJS documentation to read what a Middleware Vs Interceptor is and I could never remember the order that the different NestJS pipeline elements are called in.

So I made this cheatsheet for myself so I had something to refer to.

<!-- end excerpt -->

## The NestJS request pipeline cheatsheet

Click to open full size image - more explanation of the cheat is available below.

[![Cheatsheet](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sdzuv5lp5yl6u5btppc3.png "Cheatsheet thumbnail")](https://www.darraghoriordan.com/static/79c18cb0cdb45b53461fa1a3e7856246/97a96/CheatSheet2x.png)

In this cheatsheet show the pipeline of Middleware -> Guards -> Before Interceptors -> Pipes -> Controllers -> Services -> After Interceptors -> Exception Filters that you would typically use in a NestJS rest application.

It's important to note that some of these are just highly focused instances of middleware or interceptors. The middleware is the most generic pipeline context and the others are just NestJS constructs to encourage convention.

This isn't 100% true because as the request goes through the pipeline more context is added and made available to you in the specific element. But I think this is a good way to think about these extra NestJS pipeline classes.

I also show where the NestJS exception zone edges are and how Decorators are related to controllers.

I add some side information about NestJS module and application hooks.

Finally there is a list of the handy TypeORM hooks if you use TypeORM.

## The Nest JS Request Pipeline

These elements are called in this order. It might be easier to see the relations in the cheatsheet diagram.

### Middleware

#### USED FOR

Modifying or enhancing the request and response objects

Ending the request/response cycle

#### NOTES

Can be used to access the request and return a response.

You can’t access the result of a route.

If you return early you will bypass the rest of the NestJS pipeline

#### CODE

`implements NestMiddleware interface`

### Guards

#### USED FOR

Used to allow or prevent access to a route

This is where you should authorise requests

#### NOTES

You can access the execution context here. You can check which Controller will be used

#### CODE

implements CanActivate interface

### Before Interceptor

#### USED FOR

Before and after enhancing of any part of the request-response

e.g. logging or caching

#### NOTES

Interceptors can access the request and response

#### CODE

implements NestInterceptor

### Pipes

#### USED FOR

Transforming input data

Validating input data

#### NOTES

Pipes should operate on the arguments to be passed to controller route.

There are a bunch of built in Pipes. ValidationPipe is very useful.

#### CODE

implements PipeTransform interface

### Decorators

#### USED FOR

Extracting request data into a Controller method parameter

e.g. if you set the user using passport you could extract it to a custom decorator like `@MyAppUser user: MyAppUser` instead of doing request?.user? every time.

#### NOTES

Has onModuleInit() and onModuleDestroy() hooks

Can be instantiated asynchronously

#### CODE

decorated with @Module()

### Controllers

#### USED FOR

Route handling methods

#### NOTES

Decorators can be applied to controllers to extract parameters from the request

#### CODE

decorated with @Controller()

### Your Services

#### USED FOR

Custom business logic

#### NOTES

These are injected via providers.

#### CODE

decorated with @Injectable()

### After Interceptor

#### USED FOR

Before and after enhancing of any part of the request-response

e.g. logging or caching

#### NOTES

Interceptors can access the request and response

This block represents where the interceptor handler activates BEFORE the route handler is called

#### CODE

implements NestInterceptor interface

### Exception Filters

#### USED FOR

Handle thrown Errors and convert into relevant http response

#### NOTES

There is a built in exception filter that handles the various Nest HttpExceptions that can be thrown in your code

Exception Filters only handle exceptions thrown in the exception zone

#### CODE

implements ExceptionFilter interface

## Additional useful NestJS hooks

### Application Hooks

#### USED FOR

Running code in a service on application start or exit

#### NOTES

Turn on before app.listen() with app.enableShutdownHooks()

Use in injected service with onApplicationShutdown(signal:string)

#### CODE

see notes

### Modules

#### USED FOR

Bounding and decoupling a set of domain functionality

#### NOTES

Has onModuleInit() and onModuleDestroy() hooks

Can be instantiated asynchronously

#### CODE

decorated with @Module()

### Type ORM Hooks

#### USED FOR

Running code in a service on application start or exit

#### NOTES

@AfterLoad
@BeforeInsert, @AfterInsert
@BeforeUpdate, @AfterUpdate
@BeforeRemove, @AfterRemove

#### CODE

only works on classes decorated with @Entity

## Conclusion

Hope it helps to see these all in one place!

If you have any feedback let me know on twitter!