on
[Nest.js] 3 - Controller
[Nest.js] 3 - Controller
Contents
1. Controller?
2. Route?
3. Request
4. Response
5. Create Controller
1. Controller?
- Controllers are responsible for handling incoming requests and returning responses to the client.
https://docs.nestjs.com/controllers#controllers
- A Controller's purpose is to receive specific requests for the application.
2. Routing?
- The Routing mechanism controls which controller receives which requests.
- Each Controller has more than one route, and different routes can perform different actions.
3. Request
- @Controller() decorator, which is required to define a basic controller.
We put a path prefix in a @Controller('path') decorator allows to group a set of related routes,
, and minimize repetitive code.
- CRUD Example with HTTP Requests and Handlers
import { Controller, Get, Post, Patch, Delete } from '@nestjs/common'; @Controller('users') // requests starting with /users export class CatsController { constructor(private readonly usersService: UsersService) {} @Post() // POST /users create(@Body() createUserDto: CreateUserDto) { return this.usersService.create(createUserDto); } @Get() // GET /users findAll() { return this.usersService.findAll(); } @Get(':id') // GET /users/id findOne(@Param('id') id: string) { return this.usersService.findOne(+id); } @Patch(':id') // PATCH /users/id update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) { return this.usersService.update(+id, updateUserDto); } @Delete(':id') // DELETE /users/id remove(@Param('id') id: string) { return this.usersService.remove(+id); } }
- DTO(Data Transfer Object) : created by TypeScript Interface or by Class
#RECOMMEND USING CLASS
-> Classes are part of JS ES6 Standard, and therefore they are preserved as real entities in the complied JS.
-> TS Interfaces are removed duing the transpilation(Translate + Compilation).
-> Nest can't refer to them at runtime.
-> This is important because features such as Pipes enable additional possibilities
when they have access to the metatype of the variable at runtime.
- @Body() xxxDTO
-> it would create a xxxDTO with user's input data by matching xxxDTO's properties and names.
- @Param() params
-> params.id
- @Param('id) id: string
-> id
4. Response
- A Request Handler returns a Javascript Object or Array, it will automatically be serialized to JSON.
- Primitive type(e.g., string, number, boolean) will be sent just value without attempting to serialize it.
- Simple : just return the value, and Nest takes care of the rest
- 200 Status code is default, 201 Status code is for POST success.
- @HttpCode(...) decorator at handler-level can change the default status code.
5. Create Controller using CLI
1. CLI
$ nest g controller boards // "boards" is the name of controller, create boardsController or $ nest g controller boards --no-spec // --no-spec optio : exclude unit-test file
2. Look for a "users" folder
3. Created "users.controller.ts" in the folder
4. Imported and Registerd the controller in its module "user.module.ts" automatically
from http://jinseo-copy-and-paste.tistory.com/9 by ccl(A) rewrite - 2021-09-08 13:01:06