~/articles/view

Catatan Singkat Nest Js

Mohamad Rizky Isa S.Kom
21th Jan 2026

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.

DecoratorObject yang DiambilSetara di Express
@Request(), @Req()Seluruh object requestreq
@Response(), @Res()Object responseres
@Next()Fungsi next handlernext
@Session()Object sessionreq.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 URLreq.query / req.query[key]
@Headers(name?)HTTP Headersreq.headers / req.headers[name]
@Ip()Alamat IP clientreq.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

DecoratorKegunaan UtamaTips 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

UTF-8Nuxt-Content-Engine
LIVE_MODE