Skip to content

Object Details ​

Deserve provides error handling for route execution errors, validation errors, not found errors, static file errors, and custom error responses.

Basic Error Handling ​

Handle errors with the router.catch() method:

typescript
import { Router } from '@neabyte/deserve'

const router = new Router({ routesDir: './routes' })

router.catch((ctx, error) => {
  return ctx.send.json({
    error: 'Something went wrong',
    statusCode: error.statusCode,
    path: error.path,
    method: error.method
  }, { status: error.statusCode })
})

router.serve(8000)

Error Object Structure ​

The error handler receives the context object and an error object:

typescript
router.catch((ctx, error) => {
  // error.statusCode - HTTP status code (404, 500, etc.)
  // error.path - Request path
  // error.method - HTTP method
  // error.error - Error object (if available)
  return ctx.send.json({
    error: error.error?.message || 'An error occurred',
    status: error.statusCode,
    path: error.path,
    method: error.method
  }, { status: error.statusCode })
})

Common Error Scenarios ​

404 - Route Not Found ​

typescript
router.catch((ctx, error) => {
  if (error.statusCode === 404) {
    return ctx.send.json({
      error: 'Route not found', path: error.path
    }, { status: 404 })
  }
  return null // Use default error handling
})

500 - Server Errors ​

typescript
router.catch((ctx, error) => {
  if (error.statusCode === 500) {
    console.error('Server error:', error.error)
    return ctx.send.json({ error: 'Internal server error' }, { status: 500 })
  }
  return null
})

Route Handler Error Handling ​

Catch errors in individual route handlers:

typescript
export async function POST(ctx: Context): Promise<Response> {
  try {
    const data = await ctx.body()
    // Process data...
    return ctx.send.json({ success: true })
  } catch (error) {
    return ctx.send.json(
      { error: 'Failed to process request' },
      { status: 500 }
    )
  }
}

Validation Errors ​

Return appropriate status codes for validation errors:

typescript
export async function POST(ctx: Context): Promise<Response> {
  const data = await ctx.body()
  if (!data.email) {
    return ctx.send.json(
      { error: 'Email is required' },
      { status: 400 }
    )
  }
  // Process valid data...
  return ctx.send.json({ success: true })
}

Released under the MIT License.