Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: add zh-hans on middleware page #1283

Merged
merged 2 commits into from
Aug 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/docs-app/docs/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Similar to other meta-frameworks such as Next.JS, Nuxt, SvelteKit, Qwik City, an
- Supports Vite/Vitest/Playwright
- Server and deployment integrations powered by [Nitro](https://nitro.unjs.io)
- [File-based routing](/docs/features/routing/overview)
- [Server-side data fetching](/docs/features/data-fetching/server-side-data-fetching.md)
- [Server-side data fetching](/docs/features/data-fetching/server-side-data-fetching)
- [Support for using Markdown as content routes](/docs/features/routing/content)
- [API/server routes](/docs/features/api/overview)
- Hybrid [SSR](/docs/features/server/server-side-rendering)/[SSG support](/docs/features/server/static-site-generation)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@
"message": "内容路由",
"description": "The label for the doc item Content Routes in sidebar docsSidebar, linking to the doc features/routing/content"
},
"sidebar.docsSidebar.doc.Middleware": {
"message": "中间件",
"description": "The label for the doc item Middleware in sidebar docsSidebar, linking to the doc features/routing/middleware"
},
"sidebar.docsSidebar.doc.Providers": {
"message": "服务器提供商",
"description": "The label for the doc item Providers in sidebar docsSidebar, linking to the doc features/deployment/providers"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ export default class BlogPostComponent {
}
```

### 使用源标签解析器
### 使用 meta 标签解析器

在路由配置中通过为 `RouteMeta` 对象的 `meta` 属性设置一个 `postMetaResolver` 函数,可以为一个路由解析 meta 标签。

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# 中间件

Analog 支持服务端中间件,可以用于修改请求,检查认证,发送跳转等其他操作。

## 设置中间件

位于 `src/server/middleware` 目录下的中间件会自动被注册。

```treeview
src/
└── server/
└── middleware/
└── auth.ts
```

中间件通过 `defineEventHandler` 函数来定义。

```ts
import { defineEventHandler, sendRedirect, setHeaders } from 'h3';

export default eventHandler((event) => {
if (event.node.req.originalUrl === '/checkout') {
console.log('event url', event.node.req.originalUrl);

setHeaders(event, {
'x-analog-checkout': 'true',
});
}
});
```

- 中间件应该只修改请求并且没有任何返回值!
- 中间件按照文件名的顺序执行。如果要自定义顺序,建议给文件名上加上数字前缀来实现。

## 中间件的筛选器

中间件可以通过筛选器只处理特定的路由。

```ts
export default defineEventHandler(async (event) => {
// Only execute for /admin routes
if (getRequestURL(event).pathname.startsWith('/admin')) {
const cookies = parseCookies(event);
const isLoggedIn = cookies['authToken'];

// check auth and redirect
if (!isLoggedIn) {
sendRedirect(event, '/login', 401);
}
}
});
```
Loading