0
Home  ›  Article

Nest Js

Panduan Lengkap NestJS

1. Pendahuluan ke NestJS

NestJS adalah framework backend berbasis Node.js yang menggunakan TypeScript dan terinspirasi oleh konsep Angular. Framework ini berfokus pada modularitas, arsitektur yang scalable, dan pengembangan aplikasi server-side yang efisien.

Mengapa Menggunakan NestJS?

  • Berbasis TypeScript: Mendukung pengembangan dengan tipe data yang aman.
  • Modular: Aplikasi terstruktur menggunakan modul.
  • Ekosistem yang Kuat: Dukungan untuk GraphQL, WebSocket, Microservices, dan lainnya.
  • Kompatibilitas: Dapat menggunakan pustaka JavaScript yang sudah ada.

Instalasi NestJS

  1. Install CLI NestJS:
    npm install -g @nestjs/cli
    
  2. Buat proyek baru:
    nest new nama-proyek
    
  3. Jalankan aplikasi:
    npm run start
    

2. Struktur Proyek NestJS

Struktur Dasar

src/
├── app.controller.ts       // Controller utama
├── app.module.ts           // Modul utama
├── app.service.ts          // Service utama
├── main.ts                 // Entry point aplikasi

Komponen Utama

  • Module: Mengelompokkan fitur aplikasi ke dalam unit logis.
  • Controller: Menangani request HTTP dan mengembalikan respons.
  • Service: Mengelola logika bisnis aplikasi.
  • Provider: Komponen reusable yang dapat di-inject.

File main.ts

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

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

3. Dasar-Dasar NestJS

3.1 Module

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

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

3.2 Controller

import { Controller, Get } from '@nestjs/common';

@Controller('users')
export class UserController {
  @Get()
  findAll(): string {
    return 'This action returns all users';
  }
}

3.3 Service

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

@Injectable()
export class UserService {
  getUsers(): string[] {
    return ['John', 'Doe'];
  }
}

3.4 Dependency Injection

import { Controller, Get } from '@nestjs/common';
import { UserService } from './user.service';

@Controller('users')
export class UserController {
  constructor(private readonly userService: UserService) {}

  @Get()
  findAll(): string[] {
    return this.userService.getUsers();
  }
}

4. CRUD dengan NestJS

4.1 Membuat Resource Baru

nest generate resource users

4.2 Struktur Resource

src/users/
├── dto/                // Data Transfer Objects
├── entities/           // Entity definitions
├── users.controller.ts // Controller
├── users.module.ts     // Modul
├── users.service.ts    // Service

4.3 Contoh CRUD

Create User

@Post()
create(@Body() createUserDto: CreateUserDto): string {
  return 'This action adds a new user';
}

Read Users

@Get()
findAll(): string {
  return 'This action returns all users';
}

Update User

@Put(':id')
update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto): string {
  return `This action updates a #${id} user`;
}

Delete User

@Delete(':id')
remove(@Param('id') id: string): string {
  return `This action removes a #${id} user`;
}

5. Middleware, Guards, dan Interceptors

5.1 Middleware

import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    console.log(`Request...`);
    next();
  }
}

5.2 Guards

import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Observable } from 'rxjs';

@Injectable()
export class AuthGuard implements CanActivate {
  canActivate(context: ExecutionContext): boolean {
    const request = context.switchToHttp().getRequest();
    return request.headers.authorization === 'Bearer valid-token';
  }
}

5.3 Interceptors

import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

@Injectable()
export class TransformInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    return next.handle().pipe(map((data) => ({ success: true, data })));
  }
}

6. Database dengan TypeORM

6.1 Instalasi

npm install @nestjs/typeorm typeorm pg

6.2 Konfigurasi Database

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: 'localhost',
      port: 5432,
      username: 'postgres',
      password: 'password',
      database: 'test',
      autoLoadEntities: true,
      synchronize: true,
    }),
  ],
})
export class AppModule {}

6.3 Entity

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  email: string;
}

7. Kesimpulan

NestJS adalah framework yang powerful untuk membangun aplikasi server-side modern. Dengan pendekatan modular, dukungan penuh untuk TypeScript, dan ekosistem yang fleksibel, NestJS sangat cocok untuk proyek kecil maupun besar.

Referensi Tambahan

Posting Komentar
Search
Menu
Theme
Share
Additional JS