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