Daftar Jenis Error pada Nest Js dan Penggunaannya

Jan 2, 2025
4 min read
Widodo
Widodo
Author

Share This Article

Daftar Jenis Error pada Nest Js dan Penggunaannya

 NestJS menyediakan berbagai jenis HTTP exception bawaan yang dapat digunakan untuk menangani berbagai situasi error. Semua exception ini berasal dari kelas dasar HttpException, dan masing-masing mewakili status HTTP tertentu. Berikut adalah daftar jenis exception di NestJS beserta penggunaannya:


Daftar Jenis Error dan Penggunaannya

Exception Status Code Deskripsi Penggunaan Umum
BadRequestException 400 Permintaan yang tidak valid atau data input yang tidak sesuai. Validasi input, data request tidak sesuai, atau parameter yang hilang.
UnauthorizedException 401 Akses ditolak karena tidak ada otorisasi. Token JWT tidak ada atau tidak valid, atau pengguna belum login.
PaymentRequiredException 402 Digunakan untuk kasus khusus terkait pembayaran. API atau fitur premium yang memerlukan pembayaran.
ForbiddenException 403 Pengguna tidak memiliki izin untuk mengakses sumber daya tertentu. Akses ke fitur atau data yang memerlukan peran tertentu (misalnya admin-only).
NotFoundException 404 Sumber daya yang diminta tidak ditemukan. Endpoint, data, atau file tertentu tidak ditemukan.
MethodNotAllowedException 405 Metode HTTP yang digunakan tidak diizinkan. Mengakses endpoint dengan metode yang salah (misalnya, POST ke endpoint GET-only).
NotAcceptableException 406 Konten yang diminta tidak dapat dikembalikan dalam format yang diminta. Format respon yang diminta oleh client tidak didukung oleh server.
RequestTimeoutException 408 Server tidak menerima permintaan dalam waktu yang ditentukan. Permintaan dari client terlalu lama untuk diproses.
ConflictException 409 Konflik terjadi saat mencoba memproses permintaan. Saat mencoba membuat data yang sudah ada (misalnya, email duplikat saat registrasi).
GoneException 410 Sumber daya yang diminta tidak lagi tersedia di server. Endpoint atau data yang telah dihapus secara permanen.
PreconditionFailedException 412 Kondisi yang diajukan oleh client tidak terpenuhi. Saat header If-None-Match atau If-Match tidak terpenuhi dalam permintaan.
PayloadTooLargeException 413 Payload data terlalu besar untuk diproses oleh server. Unggahan file yang melebihi batas yang ditentukan.
UnsupportedMediaTypeException 415 Format data yang dikirimkan tidak didukung oleh server. Mengirimkan data dalam format yang salah (misalnya, menggunakan text/plain alih-alih application/json).
UnprocessableEntityException 422 Permintaan tidak dapat diproses karena kesalahan semantik. Validasi input yang lebih kompleks (misalnya, data JSON tidak valid).
InternalServerErrorException 500 Kesalahan di sisi server. Error yang tidak terduga atau bug dalam aplikasi.
NotImplementedException 501 Server tidak mendukung fitur yang diminta. Fitur yang belum diimplementasikan dalam API.
BadGatewayException 502 Server menerima respon yang buruk dari server upstream. Masalah komunikasi dengan microservice atau server pihak ketiga.
ServiceUnavailableException 503 Server tidak dapat menangani permintaan saat ini. Server sedang dalam proses maintenance atau overload.
GatewayTimeoutException 504 Server upstream gagal merespons dalam waktu yang ditentukan. Waktu tunggu habis saat berkomunikasi dengan layanan lain.

Cara Penggunaan

1. Menggunakan Exception Langsung

Setiap exception dapat dilempar langsung menggunakan throw:

import { BadRequestException, NotFoundException } from '@nestjs/common';
if (!data) {
throw new NotFoundException('Data not found');
}
if (!isValid(input)) {
throw new BadRequestException('Invalid input data');
}

2. Menggunakan Custom Message

Setiap exception mendukung pesan khusus:

throw new UnauthorizedException('Token is invalid or expired');

3. Custom Exception dengan Payload

Anda juga bisa memberikan detail tambahan menggunakan parameter kedua:

throw new BadRequestException('Invalid data', { errorCode: 1001, field: 'email' });

Membuat Custom Exception

Jika jenis exception bawaan tidak mencukupi, Anda bisa membuat exception sendiri dengan mewarisi HttpException:

import { HttpException, HttpStatus } from '@nestjs/common';
export class CustomException extends HttpException {
constructor(message: string) {
super(message, HttpStatus.I_AM_A_TEAPOT); // Contoh menggunakan kode 418
}
}

Penggunaan:

throw new CustomException('This is a custom exception');

Mengelola Error di Tingkat Global

Untuk menangani error secara global, gunakan Global Exception Filter:

import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common';
@Catch(HttpException)
export class GlobalExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const status = exception.getStatus();
const message = exception.getResponse();
response.status(status).json({
statusCode: status,
error: message,
timestamp: new Date().toISOString(),
});
}
}

Registrasikan filter ini:

import { AppModule } from './app.module';
import { GlobalExceptionFilter } from './global-exception.filter';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalFilters(new GlobalExceptionFilter());
await app.listen(3000);
}
bootstrap();

Dengan memahami dan memanfaatkan jenis-jenis exception ini, Anda dapat menangani error dengan lebih baik dan memberikan pengalaman API yang lebih profesional. 😊