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

  • onRequest functions are wrapped so that a returned response ends the middleware.
  • onBeforeResponse functions 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
);
},
});
Last updated: 5/6/26, 4:10 AMEdit this pageReport an issue with this page