Decorators are functions you attach with the @ sign to a class or to its methods, properties and parameters. Each one adds metadata to its target. Nest reads that metadata to build routes and to wire up dependency injection.
Nest uses three main kinds:
- Class decorators say what a class is.
@Module()defines a module,@Controller()defines a controller, and@Injectable()makes a class injectable as a provider. - Method decorators such as
@Get()and@Post()map a method to an HTTP route. - Parameter decorators read the request.
@Param()reads a route parameter,@Query()the query string, and@Body()the request body.
@Injectable() // Makes class injectable
export class UsersService {}
@Controller('users') // Defines a controller
export class UsersController {
@Get(':id') // HTTP GET method
findOne(@Param('id') id: string, @Query() query: Record<string, string>) {} // Route parameter, query parameters
@Post() // HTTP POST method
create(@Body() body: CreateUserDto) {} // Request body
}
@Module({ controllers: [UsersController], providers: [UsersService] }) // Defines a module
export class UsersModule {}
Nest relies on TypeScript's experimentalDecorators and emitDecoratorMetadata options, which nest new turns on in tsconfig.json.
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.
Why there's no diagram: “”
The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓
The diagram below the answer is the concept . Jump to it ↓