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
- Install CLI NestJS:
npm install -g @nestjs/cli - Buat proyek baru:
nest new nama-proyek - 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