Basic Middleware
Create middleware by defining amiddleware.ts file in your src/ directory:
src/middleware.ts
Middleware runs on every request in SSR mode, and during build time for pre-rendered pages.
The Context Object
Middleware receives acontext object with request information and helpful utilities:
src/middleware.ts
Available Properties
Request
The incoming HTTP request
URL
Parsed URL object
Record<string, string>
Route parameters from dynamic routes
AstroCookies
Cookie utilities for reading/writing cookies
App.Locals
Shared data object passed to pages
(path: string, status?: number) => Response
Helper to create redirect responses
(path: string) => Promise<Response>
Internally rewrite to a different URL
string
Client’s IP address
Authentication Example
Implement authentication in middleware:src/middleware.ts
src/pages/dashboard.astro
Sequencing Middleware
Chain multiple middleware functions usingsequence:
src/middleware.ts
src/middleware/logger.ts
src/middleware/cors.ts
Execution Order
Execution Order
Middleware executes in the order specified:
loggerruns firstcorsruns secondauthruns last- Page handler executes
- Response bubbles back through middleware
Early Returns
Early Returns
Any middleware can return early, skipping subsequent middleware:
Modifying Responses
Modify responses before they’re sent:src/middleware.ts
Redirects and Rewrites
Redirects
Return redirect responses to send users to different URLs:src/middleware.ts
Rewrites
Internally rewrite requests to different routes without changing the URL:src/middleware.ts
Cookie Management
Work with cookies in middleware:src/middleware.ts
Cookie Options
string
Cookie path. Default: ’/’
string
Cookie domain
Date
Expiration date
number
Max age in seconds
boolean
HTTP-only flag (not accessible via JavaScript)
boolean
Secure flag (HTTPS only)
'strict' | 'lax' | 'none'
SameSite attribute
Type Safety
Type your locals object for better TypeScript support:src/env.d.ts
context.locals and Astro.locals are fully typed:
src/middleware.ts
API Routes
Middleware also runs for API routes:src/pages/api/data.ts
Common Patterns
- Rate Limiting
- Localization
- Security Headers
src/middleware/rate-limit.ts
Conditional Middleware
Run middleware conditionally based on the route:src/middleware.ts
Related Resources
Actions
Handle form submissions
SSR
Server-side rendering
API Routes
Build API endpoints
Authentication
Authentication patterns