Skip to content

B. NestJs Controller

1. Apa itu Controller?

  • Controller bertugas untuk menerima request dari client dan memberikan response ke cliet
  • Setiap controller bertugas untuk menerima data dari endpoint tertentu, seperti "/latihan" dengan method tertentu sepert GET, POST, PATCH, PUT, dan DELETE
  • Controller akan menggunakan provider yang telah didaftarkan pada module
  • Pada NestJS controller diberikan decorator @Controller() pada class
  • Parameter yang di isi pada decorator @Controller() adalah string base path dari controller tersebut
  • Controller dapat dibuat dengan cara manual atau menggunakan Nest CLI

2. Bagaimana cara kerja Controller

Ketika kita mengguanakn NestJS untuk aplikasi yang kita buat, secara default kita kan menggunakan service pattern seperti gambar di bawah

Alt text

atau dapat juga menggunakan service pattern

Alt text

3. Latihan membuat controller

Pada latihan kali ini kita akan membuat controller dan mempelajari basic-basic yang controller

terminal
npx nest g controller latihan

Jika berhasil kita akan melihat pesan seperti di bawah

terminal
ihsanabuhanifah@ihsanabuhanifah-MacBook-Pro backend-nestjs % npx nest g controller latihan
CREATE src/latihan/latihan.controller.spec.ts (499 bytes)
CREATE src/latihan/latihan.controller.ts (103 bytes)
UPDATE src/latihan/latihan.module.ts (178 bytes)
ihsanabuhanifah@ihsanabuhanifah-MacBook-Pro backend-nestjs %

Alt text

Dari pesan tersebut kita melihat nest cli sudah membuat file baru dengan nama latihan.controller.ts

latihan.controller.ts
import { Controller } from "@nestjs/common";

@Controller("latihan")
export class LatihanController {}

kemudian secara otomatis controller juga terimport otomatis pada file latihan.module.ts

latihan.module.ts
import { Module } from "@nestjs/common";
import { LatihanController } from "./latihan.controller"; //disini

@Module({
  controllers: [LatihanController], // disini
})
export class LatihanModule {}

4. Membuat Routing pada controller

Selanjutnya kita akan membuat routing sederhana pada controller, dan kita akan menggunakan postman sebagai aplikasi pengujian routing yang kita buat

Method GET

latihan.controller.ts
import { Controller, Get } from "@nestjs/common"; //import Get

@Controller("latihan") // base url
export class LatihanController {
 @Get()
  findAll() {
    return {
      method: 'GET',
    };
  }
}

Alt text

Method GET dengan parameter id

latihan.controller.ts
import { Controller, Get, Param } from '@nestjs/common'; //import Get

@Controller('latihan') // base url
export class LatihanController {
 @Get()
  findAll() {
    return {
      method: 'GET',
    };
  }

  @Get('detail/:id')
  findById(@Param('id') id: string) {
    return {
      method: 'GET',
      param: {
        id: id,
      },
    };
  }
}

Alt text

Method POST

latihan.controller.ts
import { Body, Controller, Get, Param, Post } from '@nestjs/common'; //import Post

interface payloadDto {
  name: string;
  age: number;
}

@Controller('latihan') // base url
export class LatihanController {
 @Get()
  findAll() {
    return {
      method: 'GET',
    };
  }

  @Get('detail/:id')
  findById(@Param('id') id: string) {
    return {
      method: 'GET',
      param: {
        id: id,
      },
    };
  }

  @Post('/create')
  create(@Body() payload: payloadDto) {
    const { name, age } = payload;
    return {
      method: 'POST',
      body: {
        name: name,
        age: age,
      },
    };
  }
}

Alt text

Method PUT

latihan.controller.ts
...
@Put('/update/:id')
  update(@Param('id') id: string, @Body() payload: payloadDto) {
    return {
      method: 'PUT',
      param: {
        id: id,
      },
      body: payload,
    };
  }

Alt text

Method DELETE

latihan.controller.ts
...
 @Delete('delete/:id')
  delete(@Param('id') id: string) {
    return {
      method: 'DELETE',
      param: {
        id: id,
      },
    };
  }

Alt text

Method GET dengan query string

latihan.controller.ts
import {
  Body,
  Controller,
  Delete,
  Get,
  Param,
  Post,
  Put,
  Query,
} from '@nestjs/common';
...


interface QueryLatihanDto {
  name?: string;
  age_start?: number;
  age_end?: number;
}

@Controller('latihan') // base url
export class LatihanController {
 @Get()
  findAll(@Query() query: QueryLatihanDto) {
    return {
      method: 'GET',
      query: query,
    };
  }

...

}

Alt text