summaryrefslogtreecommitdiff
path: root/.changeset/pretty-bears-deliver.md
blob: 7be41ec0634d9cd2f55723c01b3d3d07fea9153d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
---
'astro': minor
---

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);
```