# NestJS What is Nest JS? It is a framework for building efficient, scalable Node.js server-side applications. It fully support `TypeScript`. ## Controller What is a controller? It is responsible for listening for request and make a response. In short, controller is responsible for creating the api end point and its response body. `users.contoller.ts` ```typescript= import { Controller, Get, POST } from '@nestjs/common'; @Controller('users') export class UsersController { @Get() @HttpCode(200) findAll(): string { return `Return all the list of users`; } @Get(:id) @HttpCode(200) findOne(@Param('id') id: number): string { return `Return #${id} User`; } @POST() @HttpCode(201) create(): string { return 'Adds a new user to the User List'; } } ``` In short, if make an **GET** request `/api/users` it will return something like this. ```json= { "users": [ { "id": 1, "name": "Lim", "job": "NestJS Developer" }, { "id": 2, "name": "German", "job": "Senior Go Developer" }, { "id": 3, "name": "Swan", "job": "Senior Salesforce Developer" }, { "id": 4, "name": "Luke", "job": "Senior Bento Developer" } ] } ``` And if we make a **GET** request `/api/users/1` it will return something like this. ```json= { "users": { "id": 1, "name": "Lim", "job": "NestJS Developer" } } ``` If we make a **POST** request `/api/users` . ```json= { "name": "Hung", "job": "Dev Manager" } ``` And the response would be. ```json= { "name": "Hung", "job": "Dev Manager", "id": "5", "createdAt": "2021-05-11T02:19:17.688Z" } ``` ## Providers What is a providers? Providers are a type of a class that uses a form of complexity or logic. Think of it a Service Provider that interacts with a database. `user.interface.ts` ```typescript= export interface User { name: string; job: string; } ``` `users.service.ts` ```typescript= import { Injectable } from '@nestjs/common'; import { User } from './interfaces/user.interface'; @Injectable() export class UsersService { private readonly users: User[] = []; create(user: User){ this.users.push(user); } } ``` ## Modules What is a modules? Modules provides metadara that NestJS uses to organize the app structure. `users.module.ts` ```typescript= import { Module } from '@nestjs/common'; import { UsersController } from './users.controller'; import { UsersService } from './users.service'; @Module({ controllers: [UsersController], providers: [UsersService], }); export class UsersModule {} ``` Then we need to add this module in the root folder. `app.module.ts` ```typescript= import { Module } from '@nestjs/common'; import { UsersModule } from './users/users.module'; @Module({ imports: [UsersModule], }) export class AppModule {} ``` The `@Module()` decorator takes one object whose properties descrive the module: - `imports`: Modules that will be use in app. - `exports`: To ensure other modules can be used throughout the app. - `controllers`: Set of controllers defined in this module which have to be instantiated. - `providers`: All services and providers within the module will be place inside ## Interceptor What is Interceptor? It is a set of middleware that lets you see the request that goes into the application. ## Guard What is a Guard? It's a middleware that used for authentication and authorization. It can only return true or false. ## Pipe What is a Pipe? It's a middleware that sits between client and the controller. Mostly used for transforming data, before they go to the controller. ## DTO (Data Transfer Object) What is DTO? It defines how data will be sent over the network. ## Interfaces What is Interfaces? It is used for type-checking.