Skip to main content

Command Palette

Search for a command to run...

NestJS Framework

Updated

Pengenalan

Untuk programmer yang sudah menggunakan NodeJS mungkin sudah familiar dengan namanya NestJS Framwork. Ya, NestJS merupakan salah satu framework yang cukup populare di komunitas Javascript dan Typescript. NestJS sebetulnya hanya membungkus library-library npm yang populer menjadi framework Layer 2 lalu ditambah aturan dan cara-cara mendefine module agar lebih tertata. Sehingga memaksa programmer untuk mengikuti dan mematuhi arsitektur tertentu dalam pembuatan aplikasinya.

Berdasarkan official site dari NestJS, sudah banyak perusahaan yang menggunakan NestJS sebagai aplikasi enterprise mereka seperti Adidas, Gitlab, Neo4J, BMW, IBM dll. Membuktikan bahwa NestJS sudah cukup mature dan dipercaya oleh perusahaan-perusahaan bersekala local maupun international.

Keunggulan

NestJS menggunakan pendekatan modularity dan scalability sehingga sangat memudahkan programmer untuk memanage codenya dan mengatur performancenya. Yang mana sebetulnya sama saja seperti menggunakan misal light framework seperti ExpressJS atau Koa. Namun Express atau Koa terlalu liar atau fleksible, sehingga desain architecture yang dibangun setiap programmer akan bervariasi yang akan mengakibatkan learning curve ketika terjadi pemindahan pekerjaan antar programmer cukup sulit.

Keunggulan lainnya dari NestJS yaitu kaya akan fitur-fiturnya dan flexibilitasnya. Seperti:

  • Modularity

  • Scalability

  • Dependency Injection

  • Type Safety

  • Testable

NestJS menggunakan typescript sebagai dasar bahasa pemogramannya sehingga memaksa programmer untuk selalu mengikuti aturan atau design yang sudah dibuat dan disetujui bersama, selain itu karena menggunakan typescript, maka akan lebih aman dimana setiap variable yang dibuat akan didefinisikan tipe datanya secara explisit.

Selain itu, ketika dev menginisiasi module menggunakan Injectable Decorator secara default Nest akan mendeklarasikan module tersebut sebagai Singleton. Dalam beberapa kondisi ini baik karena akan meringankan beban memory. Tapi jika salah menggunakan Pattern ini, bisa berakibat pada masalah Race Condition yang akan saya gambarkan pada article selanjutnya.

Memulai NestJS Project

Untuk bisa menggunakan NestJS, pertama harus menginstall NodeJS terlebih dahulu dengan mengkuti langkah pada official site pada link ini (Install NodeJS) atau bisa menggunakan version manager seperti NVM dengan cara mengikuti cara installation-nya pada official dokumentasinya (Install NVM).

Untuk memvalidasi bahwa dengan menjalankan

$ node --version
v22.17.0

Jika sudah tertampil version dari NodeJS maka NodeJS berhasil di install. Selanjutnya bisa mencoba initial NestJS Project dengan menjalankan command seperti ini.

$ npm i -g @nestjs/cli
$ nest new coba

Step selanjutnya akan ada option agar kita memilih akan menggunakan package manager apa, ada npm, yarn, dan pnpm. Secara default nest akan memilih npm. Jadi bisa langsung hit enter saja agar secara default memilih npm.

✨  We will scaffold your app in a few seconds..

? Which package manager would you ❤️  to use?
❯ npm
  yarn
  pnpm

✨  We will scaffold your app in a few seconds..

✔ Which package manager would you ❤️  to use? npm
CREATE coba/.prettierrc (52 bytes)
CREATE coba/README.md (5028 bytes)
CREATE coba/eslint.config.mjs (899 bytes)
CREATE coba/nest-cli.json (171 bytes)
CREATE coba/package.json (1975 bytes)
CREATE coba/tsconfig.build.json (97 bytes)
CREATE coba/tsconfig.json (677 bytes)
CREATE coba/src/app.controller.ts (274 bytes)
CREATE coba/src/app.module.ts (249 bytes)
CREATE coba/src/app.service.ts (142 bytes)
CREATE coba/src/main.ts (228 bytes)
CREATE coba/src/app.controller.spec.ts (617 bytes)
CREATE coba/test/jest-e2e.json (183 bytes)
CREATE coba/test/app.e2e-spec.ts (669 bytes)

✔ Installation in progress... ☕

🚀  Successfully created project coba

Jika sudah tertampil successfully berarti setup projek berhasil dilakukan.

Generated files

Secara default, file yang digenerate oleh NestJS Cli akan terlihat cukup simple. Jika masuk ke directory yang baru digenerate maka akan terlihat file-file ini.

coba/src
  - app.module.ts
  - app.service.ts
  - app.controller.ts
  - app.controller.spec.ts
  - main.ts
  • main.ts

file ini akan menjadi entrypoint ketika app dijalankan karena bootstrap dari aplikasi ada pada file ini.

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(process.env.PORT ?? 3000);
}
bootstrap();
  • app.controller.ts

File controller adalah merupakan translator router dari setiap endpoint yang akan diakses dari luar layer.

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}
  • app.service.ts

File service ini umumnya akan berisi business logic dari aplikasi. Module ini di-inject ke controller sebagai logic utama yg akan eksekusi.

import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}
  • app.module.ts

File ini digunakan untuk mengumpulkan semua module agar bisa saling terhubung antar module-module lain yang terlbat dalam module tersebut.

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Running

Jika masuk ke folder tersebut melalui terminal dan jalankan command npm run start:dev dimana secara default akan listen di port 3000. Bisa dicoba dengan mengarahkan browser ke alamat http://localhost:3000. Maka akan tertampil Hello world pada browser.

References