astro/.changeset/pretty-bears-deliver.md
2023-05-04 08:03:52 -04:00

1.1 KiB

astro
minor

Implements a new experimental middleware in Astro.

The middleware is available under the following experimental flag:

export default defineConfig({
    experimental: {
        middleware: true
    }
})

Or via CLI, using the new argument --experimental-middleware.

Create a file called middleware.{js,ts} inside the src folder, and export a onRequest function.

From astro/middleware, use the defineMiddleware utility to take advantage of type-safety, and use the sequence utility to chain multiple middleware functions.

Example:

import {defineMiddleware, sequence} from "astro/middleware";

const redirects = defineMiddleware((context, next) => {
  if (context.request.url.endsWith("/old-url")) {
    return context.redirect("/new-url")    
  }
  return next();
});

const minify = defineMiddleware(async (context, next) => {
  const repsonse = await next();
  const minifiedHtml = await minifyHtml(response.text());
  return new Response(minifiedHtml, {
    status: 200,
    headers: response.headers
  });
})

export const onRequest = sequence(redirects, minify);