
Paraglide JS
AppparaglideMiddleware()
paraglideMiddleware<
T>(request,resolve,callbacks?):Promise<Response>
Defined in: server/middleware.js:64
Server middleware that handles locale-based routing and request processing.
This middleware performs several key functions:
- Determines the locale for the incoming request using configured strategies
- Handles URL localization and redirects (only for document requests)
- Maintains locale state using AsyncLocalStorage to prevent request interference
When URL strategy is used:
- The locale is extracted from the URL for all request types
- If URL doesn't match the determined locale, redirects to localized URL (only for document requests)
- De-localizes URLs before passing to server (e.g.,
/fr/about→/about)
Type Parameters
T
T
The return type of the resolve function
Parameters
request
Request
The incoming request object
resolve
(args) => T | Promise<T>
Function to handle the request
callbacks?
Callbacks to handle events from middleware
onRedirect
(response) => void
Returns
Promise<Response>
Examples
// Basic usage in metaframeworks like NextJS, SvelteKit, Astro, Nuxt, etc.
export const handle = async ({ event, resolve }) => {
return serverMiddleware(event.request, ({ request, locale }) => {
// let the framework further resolve the request
return resolve(request);
});
};
// Usage in a framework like Express JS or Hono
app.use(async (req, res, next) => {
const result = await serverMiddleware(req, ({ request, locale }) => {
// If a redirect happens this won't be called
return next(request);
});
});
// Usage in serverless environments like Cloudflare Workers
// ⚠️ WARNING: This should ONLY be used in serverless environments like Cloudflare Workers.
// Disabling AsyncLocalStorage in traditional server environments risks cross-request pollution where state from
// one request could leak into another concurrent request.
export default {
fetch: async (request) => {
return serverMiddleware(
request,
({ request, locale }) => handleRequest(request, locale),
{ disableAsyncLocalStorage: true }
);
}
};