Catatan Singkat Nest Js
oleh : Mohamad Rizky Isa S.Kom
Membuat Module
untuk membuat modul di nest js gunakan perintah
nest generate module user
Membuat Controller
untuk membuat controller sekaligus path controller untuk module dengan perintah
nest generate controller <nama module> <path module>
// example code
nest generate controller user user
berikut ini hasil generate controller user pada module user dan controller user
import { Controller } from '@nestjs/common';
@Controller('/api/users')
export class UserController {}
HTTP Method Dasar
- @Get(path) untuk HTTP Get
- @Post(path) untuk HTTP Post
- @Put(path) untuk HTTP Put
- @Delete(path) untuk HTTP Delete
- @Patch(path) untuk HTTP Patch
- @Head(path) untuk HTTP Head
- @Options(path) untuk HTTP Option
- @All(path) untuk semua HTTP Method
penerapanya pada controller untuk membuat post dan get
import { Controller, Get, Post } from '@nestjs/common';
@Controller('/api/users')
export class UserController {
@Post()
post() {
const data = {
id: 1,
name: 'John Doe'
}
return data;
}
@Get()
get() {
const data = [{
id: 1,
name: 'John Doe'
},
{
id: 2,
name: 'Jane Doe'
}
];
return data;
}
}
jika menggunakan params maka akan seperti ini
@Get("/:id")
getUserById(@Req() request: Request)
{
return " ini adalah params " + request.params.id
}
full code
import { Controller, Get, Post, Req } from '@nestjs/common';
import type { Request } from 'express';
@Controller('/api/users')
export class UserController {
@Get("/:id")
getUserById(@Req() request: Request)
{
return " ini adalah params " + request.params.id
}
@Post()
post() {
const data = {
id: 1,
name: 'John Doe'
}
return data;
}
@Get()
get() {
const data = [{
id: 1,
name: 'John Doe'
},
{
id: 2,
name: 'Jane Doe'
}
];
return data;
}
}
Request Decorator
Dalam ekosistem NestJS, Request Decorators adalah sekumpulan "pemanis" (decorators) yang digunakan pada parameter di dalam method controller. Fungsinya? Untuk mengambil data spesifik dari object request HTTP yang masuk tanpa kamu harus membongkar object req secara manual.
| Decorator | Object yang Diambil | Setara di Express |
|---|---|---|
@Request(), @Req() | Seluruh object request | req |
@Response(), @Res() | Object response | res |
@Next() | Fungsi next handler | next |
@Session() | Object session | req.session |
@Param(key?) | Parameter rute (URL) | req.params / req.params[key] |
@Body(key?) | Isi body (POST/PUT) | req.body / req.body[key] |
@Query(key?) | Query string di URL | req.query / req.query[key] |
@Headers(name?) | HTTP Headers | req.headers / req.headers[name] |
@Ip() | Alamat IP client | req.ip |
Single Params
// query
@Get("/single-query")
getUserByQuey(@Query("name") name: String) : string
{
return " ini adalah query " + name
}
ketika di coba menggunakan url
http://localhost:8000/api/users/multiple-params?name=Andi&age=20&email=andi@mail.com
Multiple Query
// query multiple
@Get('/multiple-params')
getUserByQuery(
@Query('name') name: string,
@Query('age') age: string,
@Query('email') email: string,
) {
return {
name,
age,
email,
}
}
http://localhost:8000/api/users/multiple-params?name=Andi&age=20&email=andi@mail.com
Htpp Response
- Secara default, return value dari method di controller akan dijadikan response body untuk HTTP Response
- Namun, kita juga bisa menggunakan express.Response jika kita mau, kita cukup menggunakan decorator @Res()
- Jika kita menggunakan express.Response, kita wajib mengirim response pada express.Response tersebut, bukan lewat return value lagi
- REKOMENDASI : Walaupun kita bisa menggunakan object express.Response, namun direkomendasikan kita langsung menggunakan return value pada method nya
- NestJS juga menyediakan Decorator yang bisa digunakan pada method untuk mengubah informasi Response, yang akan kita bahas selanjutnya
Sample Response
@Get("/sample-response")
getSampleResponse(@Res() response:Response){
response.status(200).json("ini adalah sample response")
}
Response Decorator
| Decorator | Kegunaan Utama | Tips Pro |
|---|---|---|
@HttpCode() | Menentukan status code (misal: 201, 204). | Secara default, POST adalah 201, sisanya 200. Gunakan ini jika ingin spesifik. |
@Header() | Menambahkan custom header secara statis. | Jika header bersifat dinamis (berubah tergantung logika), lebih baik gunakan object @Res(). |
@Redirect() | Mengalihkan user ke URL lain. | Kamu bisa meng-override property-nya dengan me-return { "url": string, "statusCode": number }. |
@Next() | Mengakses fungsi next() Express. | Hati-hati: Jika kamu menggunakan @Next() atau @Res(), NestJS akan masuk ke Library-specific mode dan beberapa fitur otomatis Nest mungkin terhenti. |
Contoh Penggunaan
import { Controller, Get, Post, HttpCode, Header, Redirect, Query, Next, Req, Res } from '@nestjs/common';
import { Response, NextFunction } from 'express';
@Controller('user-demo')
export class UserDemoController {
// 1. Mengubah Status Code (204 No Content untuk Delete/Update tertentu)
@Post('update-status')
@HttpCode(204)
updateStatus() {
// Logika update...
return; // Response akan kosong dengan status 204
}
// 2. Menambahkan Custom Header
@Get('info')
@Header('Cache-Control', 'none')
@Header('X-Powered-By', 'NestJS-Magic')
getStaticHeader() {
return { message: "Data ini dikirim dengan custom headers" };
}
// 3. Redirect (Statis ke Dinamis)
@Get('profile-page')
@Redirect('https://my-app.com/login', 302)
getProfile(@Query('id') id: string) {
if (id === '123') {
// Jika ID benar, override redirect ke halaman profile asli
return {
url: 'https://my-app.com/profile/123',
statusCode: 301
};
}
// Jika tidak ada ID, akan menggunakan default (ke /login)
}
// 4. Menggunakan @Next() untuk logika Middleware
@Get('next-logic')
handleNext(@Next() next: NextFunction) {
console.log('Menjalankan logika di dalam controller sebelum dipindah...');
// Memindahkan eksekusi ke middleware/handler berikutnya
next();
}
}
Sampai Sini Dulu yahh.. masih buildup sistem baru