Perilaku Default Error
TL;DR: Mekanisme penanganan error ini menangkap semua error yang terjadi selama runtime server. Ini termasuk route handler errors, middleware failures, route not found scenarios, static file errors, dan uncaught exceptions lainnya selama pemrosesan request. Jika Anda tidak mendefinisikan custom error handler dengan router.catch(), Deserve secara otomatis menggunakan perilaku default ini untuk memastikan server Anda tidak pernah crash dari unhandled errors.
Perilaku Default Dasar
Jika Anda tidak memanggil router.catch(), Deserve secara otomatis menangani semua error dengan response default (JSON atau HTML) dan status code yang sesuai:
// 1. Import Router
import { Router } from '@neabyte/deserve'
// 2. Buat router
const router = new Router({ routesDir: './routes' })
// 3. Tidak panggil router.catch() — error akan pakai response default (JSON/HTML by Accept)
// 4. Jalankan server
await router.serve(8000)Response Error Default
Response error default (tanpa custom router.catch()) mengikuti header Accept client:
- Accept menyertakan
application/json→ Body JSON:{ error, path, statusCode } - Selain itu → Body HTML: halaman error sederhana dengan status dan pesan (escaped)
Selain itu:
- Status Code: Mempertahankan status code error original (404, 500, dll.)
- Headers: Menyertakan headers yang diatur via
ctx.setHeader()sebelum error
// Contoh response default (client minta JSON)
// Status: 404
// Body: { "error": "...", "path": "/api/foo", "statusCode": 404 }
// Contoh response default (client tidak minta JSON)
// Status: 404
// Body: HTML dengan <title>404</title> dan pesan errorSkenario Error
Penanganan error default mencakup semua tipe error yang dapat terjadi selama pemrosesan request:
404 — Route Tidak Ditemukan
Ketika route tidak ada atau tidak ada route handler yang cocok ditemukan:
// GET /nonexistent
// Status: 404
// Body: JSON atau HTML (sesuai Accept)
// Headers: {}Ini termasuk:
- Routes yang tidak ada
- Routes dengan HTTP methods yang salah
- Routes yang gagal match selama routing resolution
500 — Server Errors
Ketika route handler melempar error atau exception:
export function GET(ctx: Context): Response {
// 1. Melempar error → ditangkap oleh Deserve
throw new Error('Something went wrong')
// 2. Response default: Status 500, body JSON/HTML (tanpa router.catch)
}Ini mencakup:
- Uncaught exceptions di route handlers
- Runtime errors (TypeError, ReferenceError, dll.)
- Async operation failures
- Error apa pun yang dilempar selama eksekusi handler
Error Middleware
Ketika fungsi middleware melempar error atau gagal:
// 1. Middleware melempar → error ditangkap
router.use(async (ctx, next) => {
throw new Error('Middleware failed')
// 2. Response default: Status 500, body JSON/HTML
})Semua middleware errors ditangkap dan ditangani oleh default error handler.
Error File Statis
Ketika menyajikan file statis menemui masalah:
// 1. Mount static files di /static
router.static('/static', { path: './public' })
// 2. Jika file tidak ada (GET /static/missing.jpg):
// Status: 404, Body: JSON/HTML sesuai AcceptIni termasuk:
- File not found errors (404)
- File read permission errors (500)
- Filesystem operation failures (500)
- Invalid path resolution errors (500)
Error Saat Memproses Request
Error tak terduga selama penanganan request:
// Errors di:
// - URL parsing
// - Context creation
// - Route matching
// - Response generation
// Semua default ke: Status 500, body JSON/HTMLJaminan Penanganan Error
Default error handler memastikan:
- Tidak ada crash server: Semua error ditangkap dan dikonversi ke HTTP responses
- Perilaku konsisten: Format response error yang sama di semua tipe error
- Preservasi header: Header yang diatur sebelum error dipertahankan di response
- Akurasi status code: Status code error original (404, 500, dll.) dipertahankan