1. Pengantar NestJS
NestJS adalah framework backend progresif untuk membangun aplikasi server-side yang efisien, dapat diskalakan, dan mudah dipelihara menggunakan TypeScript. NestJS menggabungkan konsep terbaik dari OOP (Object Oriented Programming), FP (Functional Programming), dan FRP (Functional Reactive Programming).
Dengan NestJS, Anda dapat membangun REST API, GraphQL API, microservices, dan banyak lagi dengan struktur yang jelas dan modular.
2. Persiapan Lingkungan Pengembangan
Sebelum mulai coding, pastikan Anda sudah menginstal beberapa tools berikut:
-
Node.js (versi 16 atau lebih baru)
-
npm atau yarn sebagai package manager
-
Editor kode seperti Visual Studio Code
-
Postman atau Insomnia untuk testing API
Untuk menginstal NestJS CLI, jalankan perintah berikut di terminal:
npm i -g @nestjs/cli
Setelah itu, buat proyek baru dengan perintah:
nest new nama-proyek-anda
Ikuti instruksi di terminal untuk memilih package manager dan konfigurasi awal.
3. Struktur Proyek NestJS
Setelah membuat proyek, Anda akan melihat struktur folder seperti ini:
src/
├── app.controller.ts
├── app.module.ts
├── app.service.ts
├── main.ts
test/
node_modules/
package.json
tsconfig.json
Penjelasan singkat:
-
app.module.ts
: Modul utama aplikasi
-
app.controller.ts
: Controller untuk menangani request
-
app.service.ts
: Service untuk logika bisnis
-
main.ts
: Entry point aplikasi
4. Membuat Modul dan Controller
Modul adalah unit utama dalam NestJS yang mengelompokkan controller dan service. Untuk membuat modul baru, gunakan CLI:
nest generate module users
Untuk membuat controller:
nest generate controller users
Contoh kode controller sederhana:
import { Controller, Get } from '@nestjs/common';
@Controller('users')
export class UsersController {
@Get()
findAll() {
return 'Ini adalah daftar semua user';
}
}
Controller ini akan merespon GET request ke
/users
dengan string sederhana.
5. Membuat Service untuk Logika Bisnis
Service berisi logika bisnis dan dapat digunakan oleh controller. Buat service dengan CLI:
nest generate service users
Contoh service sederhana:
import { Injectable } from '@nestjs/common';
@Injectable()
export class UsersService {
private readonly users = [{ id: 1, name: 'Budi' }, { id: 2, name: 'Sari' }];
findAll() {
return this.users;
}
}
Hubungkan service ke controller:
import { Controller, Get } from '@nestjs/common';
import { UsersService } from './users.service';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
findAll() {
return this.usersService.findAll();
}
}
6. Routing dan Request Handling
NestJS menggunakan decorator untuk routing. Contoh beberapa method HTTP:
-
@Get()
untuk GET request
-
@Post()
untuk POST request
-
@Put()
untuk PUT request
-
@Delete()
untuk DELETE request
Contoh controller dengan berbagai method:
import { Controller, Get, Post, Put, Delete, Body, Param } from '@nestjs/common';
@Controller('products')
export class ProductsController {
@Get()
findAll() {
return 'Daftar produk';
}
@Get(':id')
findOne(@Param('id') id: string) {
return `Produk dengan id ${id}`;
}
@Post()
create(@Body() createProductDto: any) {
return 'Produk dibuat';
}
@Put(':id')
update(@Param('id') id: string, @Body() updateProductDto: any) {
return `Produk dengan id ${id} diperbarui`;
}
@Delete(':id')
remove(@Param('id') id: string) {
return `Produk dengan id ${id} dihapus`;
}
}
7. Integrasi Database dengan TypeORM
NestJS mendukung berbagai ORM, salah satunya TypeORM. Berikut langkah integrasi dengan database PostgreSQL:
-
Install package yang dibutuhkan:
npm install --save @nestjs/typeorm typeorm pg
-
Konfigurasi module database di
app.module.ts
:
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'password',
database: 'nestjsdb',
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true,
}),
],
})
export class AppModule {}
-
Buat entity untuk tabel database, contoh
user.entity.ts
:
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
email: string;
}
-
Gunakan repository di service untuk operasi CRUD.
8. Autentikasi dan Autorisasi
NestJS menyediakan modul
@nestjs/passport
dan
passport
untuk autentikasi. Contoh implementasi JWT:
-
Install dependencies:
npm install --save @nestjs/jwt @nestjs/passport passport passport-jwt bcryptjs
-
Buat modul Auth dan konfigurasi JWT strategy.
-
Gunakan guard
@UseGuards(AuthGuard('jwt'))
untuk melindungi route.
Contoh potongan kode strategi JWT:
import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor() {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
ignoreExpiration: false,
secretOrKey: 'secretKey',
});
}
async validate(payload: any) {
return { userId: payload.sub, username: payload.username };
}
}
9. Testing di NestJS
NestJS menggunakan Jest sebagai framework testing default. Contoh unit test untuk service:
import { Test, TestingModule } from '@nestjs/testing';
import { UsersService } from './users.service';
describe('UsersService', () => {
let service: UsersService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [UsersService],
}).compile();
service = module.get(UsersService);
});
it('should return all users', () => {
expect(service.findAll()).toEqual([
{ id: 1, name: 'Budi' },
{ id: 2, name: 'Sari' },
]);
});
});
Jalankan test dengan perintah:
npm run test
10. Deploy Aplikasi NestJS
Setelah aplikasi selesai, Anda bisa deploy ke berbagai platform seperti Heroku, Vercel, atau server VPS. Contoh deploy ke Heroku:
-
Login ke Heroku CLI:
heroku login
-
Buat aplikasi baru:
heroku create nama-aplikasi-anda
-
Push kode ke Heroku:
git push heroku main
-
Set environment variables jika perlu.
Pastikan
Procfile
sudah dibuat dengan isi:
web: node dist/main.js
11. Sumber Belajar dan Source Code
Berikut beberapa sumber belajar dan contoh source code untuk memperdalam NestJS: