[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