Konfigurasi Server
Referensi: Deno.serve API Documentation
Konfigurasi server Deserve Anda dengan hostname binding dan graceful shutdown.
Setup Server Dasar
Cara paling sederhana untuk memulai server:
typescript
// 1. Import Router
import { Router } from '@neabyte/deserve'
// 2. Buat router
const router = new Router()
// 3. Jalankan server di port 8000 (bind 0.0.0.0)
await router.serve(8000)Ini memulai server Anda di 0.0.0.0:8000 (semua interface).
Method Serve Yang Diperluas
Method serve Deserve yang diperluas mendukung tiga parameter:
typescript
// Method signatures
async serve(port: number): Promise<void>
async serve(port: number, hostname?: string): Promise<void>
async serve(port: number, hostname?: string, signal?: AbortSignal): Promise<void>Hostname Binding
Bind Ke Interface Spesifik
typescript
// 1. Localhost saja (development)
await router.serve(8000, '127.0.0.1')
// 2. Semua interface (default)
await router.serve(8000, '0.0.0.0')
// 3. IP spesifik
await router.serve(8000, '192.168.1.100')Development Vs Production
typescript
// 1. Development: hanya localhost
await router.serve(8000, '127.0.0.1')
// 2. Production: listen di semua interface
await router.serve(8000, '0.0.0.0')Request Timeout
Anda bisa mengatur timeout request saat membuat router. Jika middleware dan route handler tidak selesai dalam waktu tersebut, server merespons 503 Service Unavailable:
typescript
const router = new Router({
requestTimeoutMs: 30_000
})
await router.serve(8000)Omit requestTimeoutMs untuk tanpa timeout (default).
Graceful Shutdown
Gunakan AbortSignal untuk graceful server shutdown:
typescript
// 1. Buat router dan AbortController
import { Router } from '@neabyte/deserve'
const router = new Router()
const ac = new AbortController()
// 2. Serve dengan signal; panggil ac.abort() untuk shutdown
await router.serve(8000, '127.0.0.1', ac.signal)
ac.abort()Penanganan Sinyal Process
typescript
// 1. Buat router dan AbortController
import { Router } from '@neabyte/deserve'
const router = new Router()
const ac = new AbortController()
// 2. Daftarkan signal handlers
Deno.addSignalListener('SIGINT', async () => {
ac.abort()
Deno.exit(0)
})
Deno.addSignalListener('SIGTERM', async () => {
ac.abort()
Deno.exit(0)
})
// 3. Jalankan server dengan signal; panggil ac.abort() untuk shutdown
await router.serve(8000, '127.0.0.1', ac.signal)Pengujian Konfigurasi
Uji Server Dasar
bash
# Start server
deno run --allow-net --allow-read main.ts
# Test endpoint
curl http://localhost:8000Uji Hostname Binding
bash
# Bind ke localhost saja
deno run --allow-net --allow-read main.ts
# Seharusnya bekerja
curl http://127.0.0.1:8000
# Seharusnya gagal (jika binding ke 127.0.0.1 saja)
curl http://0.0.0.0:8000Uji Graceful Shutdown
bash
# Start server
deno run --allow-net --allow-read main.ts
# Kirim SIGINT (Ctrl+C)
# Server seharusnya shutdown dengan graceful