Skip to main content

Overview

Hono provides built-in validation middleware to validate and transform incoming request data. The validator middleware can validate various parts of the request including JSON body, form data, query parameters, path parameters, headers, and cookies.

The Validator Middleware

The validator middleware is a flexible system for validating request data: From src/validator/validator.ts:46-88:

Validation Targets

The validator can validate different parts of the request:
  • json - Request body as JSON
  • form - Form data (multipart or urlencoded)
  • query - Query string parameters
  • param - Path parameters
  • header - Request headers
  • cookie - Request cookies
From src/validator/validator.ts:9-12:
GET and HEAD requests cannot validate json or form targets since these methods must not have a body.

Basic Usage

Validating JSON Body

Validating Query Parameters

Validating Path Parameters

Validating Form Data

Validation Function

The validation function receives the extracted value and the context: From src/validator/validator.ts:14-22:

Synchronous Validation

Asynchronous Validation

Error Handling

Returning Error Responses

Return a Response object to short-circuit the request:
From src/validator/validator.ts:162-170:

Throwing HTTPException

Malformed Data Errors

The validator automatically handles malformed data: From src/validator/validator.ts:94-103:

Integration with Validation Libraries

Using Zod

Zod Validator Helper

Multiple Validators

Chain multiple validators for different targets:

Validation Target Implementation

From src/validator/validator.ts:89-160, the validator extracts data based on target:

Form Data Handling

Form data supports both multipart and urlencoded formats: From src/validator/validator.ts:105-142:

Form Arrays

Type Safety

Validators provide full type safety:

Accessing Validated Data

Access validated data using c.req.valid():

Custom Validators

Create reusable validator functions:

Best Practices

  • Use validation libraries like Zod for complex schemas
  • Return specific error messages to help API consumers
  • Validate and transform data in one step
  • Use TypeScript to ensure type safety
  • Chain validators for multiple targets (params, query, body)
  • Keep validators focused and reusable
  • GET and HEAD requests cannot validate json or form targets
  • Always handle validation errors with appropriate status codes
  • Don’t trust client input - always validate server-side

Validation Patterns

Pagination Validation

Conditional Validation

  • Handlers - Learn about request handlers
  • Middleware - Understand middleware execution
  • Context - Access request and response data