diff options
author | 2023-05-04 13:03:52 +0100 | |
---|---|---|
committer | 2023-05-04 08:03:52 -0400 | |
commit | 17c074b20222b7d9491905b808ec387ca58d9b96 (patch) | |
tree | 41a9b6074c063ce68bb6808cf3214d961f68a0f0 | |
parent | 4f591ce0e463c60183a9823cbb4aa3faec43fcd6 (diff) | |
download | astro-17c074b20222b7d9491905b808ec387ca58d9b96.tar.gz astro-17c074b20222b7d9491905b808ec387ca58d9b96.tar.zst astro-17c074b20222b7d9491905b808ec387ca58d9b96.zip |
chore: update middleware changeset (#6986)
-rw-r--r-- | .changeset/pretty-bears-deliver.md | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/.changeset/pretty-bears-deliver.md b/.changeset/pretty-bears-deliver.md index 2b8bfc818..7be41ec06 100644 --- a/.changeset/pretty-bears-deliver.md +++ b/.changeset/pretty-bears-deliver.md @@ -2,4 +2,46 @@ 'astro': minor --- -New middleware API +Implements a new experimental middleware in Astro. + +The middleware is available under the following experimental flag: + +```js +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: + +```ts +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); +``` |