Langsung ke konten utama

Belajar Nest.js dari Nol: Cara Bikin Aplikasi Web yang Keren dan Modern


Nest.js itu apa sih? 🤔

Nest.js itu adalah framework Node.js yang keren banget. Framework itu kayak alat bantu buat bikin aplikasi web yang lebih gampang dan rapih. Nest.js itu ngikutin pola-pola yang bagus dari bahasa pemrograman lain, tapi tetap pake JavaScript atau TypeScript. Nest.js juga punya fitur-fitur yang mantap, kayak GraphQL, WebSockets, MicroServices, dan lain-lain. Pokoknya, kalau kamu mau belajar Nest.js, kamu bakal jago banget deh. 😎

Gimana cara mulai belajar Nest.js? 🚀

Untuk belajar Nest.js, kamu harus punya Node.js (versi >= 16) di komputer kamu. Terus, kamu juga harus install Nest CLI, yang bisa kamu lakuin dengan perintah ini di terminal:

$ npm i -g @nestjs/cli

Nest CLI itu adalah aplikasi yang bisa bikin project Nest.js dengan cepat. Kamu tinggal ketik perintah ini untuk bikin project baru:

$ nest new project-name

Nanti, di folder project-name, kamu bakal lihat beberapa file dan folder yang udah siap buat kamu kerjain. Misalnya, ada file app.controller.ts, app.module.ts, app.service.ts, dan main.ts. File-file ini adalah bagian penting dari aplikasi Nest.js, yang akan kita bahas lebih lanjut nanti.

Gimana cara bikin project dengan Nest CLI? 🛠️

Nest CLI itu bisa bikin project dengan mudah, tapi juga bisa bikin modul, controller, service, dan lain-lain. Modul itu adalah bagian dari aplikasi yang berisi logika dan fungsi tertentu. Controller itu adalah bagian yang ngatur route, atau alamat web yang bisa diakses oleh user. Service itu adalah bagian yang ngurusin bisnis logic, atau proses-proses yang terjadi di aplikasi.

Untuk bikin modul, controller, atau service, kamu bisa pake perintah nest generate, atau nest g. Misalnya, kalau kamu mau bikin modul bookstore, kamu bisa ketik:

$ nest g module bookstore

Nanti, di folder src, kamu bakal lihat folder bookstore yang berisi file bookstore.module.ts. File ini adalah file modul yang bisa kamu tambahin logika dan fungsi yang kamu mau.

Kalau kamu mau bikin controller bookstore, kamu bisa ketik:

$ nest g controller bookstore

Nanti, di folder bookstore, kamu bakal lihat file bookstore.controller.ts. File ini adalah file controller yang bisa kamu tambahin route yang kamu mau. Misalnya, kamu mau bikin route GET /books yang bisa ngembaliin daftar buku, kamu bisa nulis:

import { Controller, Get } from '@nestjs/common';
@Controller('books')
export class BookstoreController {
@Get()
getBooks() {
return 'This is the list of books';
}
}

Kalau kamu mau bikin service bookstore, kamu bisa ketik:

$ nest g service bookstore

Nanti, di folder bookstore, kamu bakal lihat file bookstore.service.ts. File ini adalah file service yang bisa kamu tambahin bisnis logic yang kamu mau. Misalnya, kamu mau bikin fungsi yang bisa ngambil data buku dari database, kamu bisa nulis:

import { Injectable } from '@nestjs/common';
@Injectable()
export class BookstoreService {
getBooks() {
// connect to database and get books data
return books;
}
}

Gimana cara kerja validasi data pada pipe? 🧐

Pipe itu adalah fungsi yang bisa ngubah, ngelakuin validasi, atau ngelakuin transformasi data yang masuk ke controller. Pipe itu bisa dipake di parameter controller, atau di decorator. Decorator itu adalah fungsi yang bisa nambahin fitur atau metadata ke class, method, atau property.

Untuk pake pipe, kamu harus import pipe yang kamu mau dari @nestjs/common. Misalnya, kamu mau pake pipe ParseIntPipe, yang bisa ngubah string jadi number, kamu bisa nulis:

import { Controller, Get, Param, ParseIntPipe } from '@nestjs/common';
@Controller('books')
export class BookstoreController {
@Get(':id')
getBook(@Param('id', ParseIntPipe) id: number) {
return `This is the book with id ${id}`;
}
}

Kalau kamu mau bikin pipe sendiri, kamu bisa bikin class yang implement interface PipeTransform. Interface itu adalah kontrak yang harus dipenuhi oleh class yang implement dia. PipeTransform itu punya method transform, yang harus kamu definisikan. Misalnya, kamu mau bikin pipe IsPositive, yang bisa ngecek apakah angka yang masuk itu positif, kamu bisa nulis:

import { Injectable, PipeTransform, ArgumentMetadata, BadRequestException } from '@nestjs/common';
@Injectable()
export class IsPositive implements PipeTransform {
transform(value: any, metadata: ArgumentMetadata) {
if (value < 0) {
throw new BadRequestException('Value must be positive');
}
return value;
}
}

Terus, kamu bisa pake pipe ini di controller kamu:

import { Controller, Get, Param, ParseIntPipe } from '@nestjs/common';
import { IsPositive } from './is-positive.pipe';
@Controller('books')
export class BookstoreController {
@Get(':id')
getBook(@Param('id', ParseIntPipe, IsPositive) id: number) {
return `This is the book with id ${id}`;
}
}

Gimana arsitektur Nest.js - Service dan Repository? 🏗️

Service dan repository itu adalah dua konsep yang penting di Nest.js. Service itu adalah bagian yang ngurusin bisnis logic, atau proses-proses yang terjadi di aplikasi. Repository itu adalah bagian yang ngurusin data access, atau cara ngambil dan nyimpen data dari database.

Service dan repository itu biasanya dipisah, biar aplikasi lebih rapih dan mudah di maintain. Service itu nggak perlu tau gimana cara ngambil data dari database, cukup panggil fungsi dari repository. Repository itu nggak perlu tau gimana cara ngolah data, cukup ngembaliin data ke service.

Service dan repository itu juga pake prinsip Inversion of Control dan Dependency Injection. Inversion of Control itu adalah prinsip yang bikin aplikasi nggak tergantung sama satu komponen aja, tapi bisa ganti-ganti sesuai kebutuhan. Dependency Injection itu adalah teknik yang bikin aplikasi nggak bikin komponen sendiri, tapi minta dari luar.

Misalnya, kamu punya service bookstore, yang butuh repository book. Kamu nggak perlu bikin instance repository book di service bookstore, tapi cukup minta di constructor. Terus, kamu nggak perlu bikin instance service bookstore di controller bookstore, tapi cukup minta di constructor juga. Kamu bisa nulis:

import { Injectable } from '@nestjs/common';
import { Book } from './book.entity';
import { BookRepository } from './book.repository';
@Injectable()
export class BookstoreService {
constructor(private bookRepository: BookRepository) {}
getBooks(): Book[] {
return this.bookRepository.findAll();
}
}
import { Controller, Get } from '@nestjs/common';
import { BookstoreService } from './bookstore.service';
import { Book } from './book.entity';
@Controller('books')
export class BookstoreController {
constructor(private bookstoreService: BookstoreService) {}
@Get()
getBooks(): Book[] {
return this.bookstoreService.getBooks();
}
}

Gimana arsitektur Nest.js - Dependency Module? 📦

Dependency module itu adalah konsep yang bikin aplikasi bisa terbagi-bagi jadi modul-modul yang saling terhubung. Modul itu adalah bagian dari aplikasi yang berisi logika dan fungsi tertentu. Modul itu bisa import atau export komponen-komponen lain, kayak controller, service, repository, atau modul lain.

Untuk bikin dependency module, kamu harus nentuin apa aja yang mau kamu export dari modul itu. Kamu bisa nulis di file modul, di property exports. Misalnya, kamu mau bikin modul bookstore, yang export service bookstore, kamu bisa nulis:

import { Module } from '@nestjs/common';
import { BookstoreController } from './bookstore.controller';
import { BookstoreService } from './bookstore.service';
import { BookRepository } from './book.repository';
@Module({
controllers: [BookstoreController],
providers: [BookstoreService, BookRepository],
exports: [BookstoreService],
})
export class BookstoreModule {}

Terus, kalau kamu mau import modul bookstore di modul lain, kamu bisa nulis di file modul lain, di property imports. Misalnya, kamu mau bikin modul user

Komentar

Postingan populer dari blog ini

Understanding Undefined Index in php and how to fix in the right way

Undefined index is a common error message that developers encounter when working with PHP. It occurs when trying to access an array or object property that does not exist or has not been initialized. This can happen due to various reasons such as incorrect spelling of the array or object key, missing or incomplete form submissions, incorrect configuration of servers, among others. In this article, we will delve deeper into undefined index errors and how to handle them in PHP.

Fungsi lain tombol penerima panggilan di headset

Kegunaan tombol yang berada di headset utamanya adalah untuk menerima panggilan dan pause panggilan. Dan headset itu sendiri, kadang juga digunakan untuk mendengarkan music, digunakan bersama saat main game, supaya suara yang dikeluarkan oleh gadget tidak terlalu keras sehingga mengurangi beban gadget. Dengan mengurangi beban gadget, ada beberapa yang beranggapan kalau itu akan menghemat batere.

Review 10 USB Docking Station Terbaik dan Terpopuler di 2023

Apa itu USB Docking Station USB docking station adalah perangkat yang memungkinkan Anda untuk menghubungkan laptop Anda dengan berbagai periferal, seperti monitor, keyboard, mouse, printer, hard drive, dan lainnya. Dengan menggunakan docking station, Anda dapat meningkatkan produktivitas, kenyamanan, dan fleksibilitas kerja Anda. Docking station juga dapat mengisi daya laptop Anda, sehingga Anda tidak perlu khawatir kehabisan baterai. 10 Usb docking station yang paling populer di tahun 2023 Corsair TBT100 Thunderbolt 3 Dock :  Docking station ini mendukung hingga dua monitor 4K atau satu monitor 5K dengan port Thunderbolt 3. Docking station ini juga memiliki port USB-C, USB-A, Ethernet, audio, dan SD card reader. Docking station ini dapat mengisi daya laptop Anda hingga 85 watt. EYD 9IN1 USB C HUB To HDMI Docking Station PD TVGA 3.5mm type C Hub :    Produk ini memiliki 9 port yang meliputi HDMI, VGA, USB-C PD, USB-A 3.0, USB-A 2.0, Ethernet, audio, dan microSD card reader. Produ