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
atau dapat juga menggunakan service pattern
3. Latihan membuat controller
Pada latihan kali ini kita akan membuat controller dan mempelajari basic-basic yang controller
Jika berhasil kita akan melihat pesan seperti di bawah
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 %
Dari pesan tersebut kita melihat nest cli sudah membuat file baru dengan nama 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
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
import { Controller, Get } from "@nestjs/common"; //import Get
@Controller("latihan") // base url
export class LatihanController {
@Get()
findAll() {
return {
method: 'GET',
};
}
}
Method GET dengan parameter id
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,
},
};
}
}
Method POST
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,
},
};
}
}
Method PUT
...
@Put('/update/:id')
update(@Param('id') id: string, @Body() payload: payloadDto) {
return {
method: 'PUT',
param: {
id: id,
},
body: payload,
};
}
Method DELETE
...
@Delete('delete/:id')
delete(@Param('id') id: string) {
return {
method: 'DELETE',
param: {
id: id,
},
};
}
Method GET dengan query string
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,
};
}
...
}