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. 😊