createMiddleware
createMiddleware wraps request and response middleware functions with fetch events.
Import
import { createMiddleware } from "@solidjs/start/middleware";Type
type RequestMiddleware = ( event: FetchEvent) => Response | Promise<Response> | void | Promise<void | Response>;
type ResponseMiddleware = ( event: FetchEvent, response: { body?: unknown }) => Response | Promise<Response> | void | Promise<void>;
function createMiddleware(args: { onRequest?: RequestMiddleware | RequestMiddleware[]; onBeforeResponse?: ResponseMiddleware | ResponseMiddleware[];}): { onRequest?: _RequestMiddleware | _RequestMiddleware[]; onBeforeResponse?: _ResponseMiddleware | _ResponseMiddleware[];};Parameters
args
- Type:
{ onRequest?: RequestMiddleware | RequestMiddleware[]; onBeforeResponse?: ResponseMiddleware | ResponseMiddleware[] } - Required: Yes
Middleware functions grouped by request phase.
Return value
- Type:
{ onRequest?: _RequestMiddleware | _RequestMiddleware[]; onBeforeResponse?: _ResponseMiddleware | _ResponseMiddleware[] }
Returns the value from Vinxi defineMiddleware.
Behavior
onRequestfunctions are wrapped so that a returned response ends the middleware.onBeforeResponsefunctions are wrapped with the current fetch event and response object.- Single middleware inputs produce single wrapped functions.
- Array inputs are mapped to arrays of wrapped functions.
Examples
Basic usage
import { createMiddleware } from "@solidjs/start/middleware";
export default createMiddleware({ onRequest: async (event) => { event.response.headers.set( "x-request-path", new URL(event.request.url).pathname ); },});