npm i -D @uni-helper/vite-plugin-uni-middleware
pnpm i -D @uni-helper/vite-plugin-uni-middleware
bun add -D @uni-helper/vite-plugin-uni-middleware
yarn add -D @uni-helper/vite-plugin-uni-middleware
vite.config.ts
import Uni from '@dcloudio/vite-plugin-uni'
import UniMiddleware from '@uni-helper/vite-plugin-uni-middleware'
import { defineConfig } from 'vite'
export default defineConfig({
plugins: [Uni(), UniMiddleware()],
})
在 src/middleware 中定义中间件
src/middleware/auth.ts
import { defineMiddleware } from '@uni-helper/vite-plugin-uni-middleware/runtime'
import { useStore } from '../store'
export default defineMiddleware((to, from) => {
const store = useStore()
if (!store.isLogin) {
return '/pages/login/index'
}
})
在 pages.json 中添加全局或页面的中间件配置
pages.json
{
...
"middleware": ["global"],
"pages": [{
"path": "pages/index/index",
"middleware": ["auth"]
}]
...
}
see types.ts
如果你使用 vite-plugin-uni-pages, 创建 pages.d.ts 来声明 middleware 的类型
pages.d.ts
declare module '@uni-helper/vite-plugin-uni-pages' {
export interface PagesConfig {
middleware: string[]
}
}
export {}
若要为页面添加配置,只需使用 route-block
pages/index/index.vue
<route>
{
"middleware": ["auth"]
}
</route>
- vite
- 扫描 middlewareDir 和 pages.json
- 提供虚拟模块并导出 middlewares
- runtime
- 混入页面生命周期 onShow
- 调用 global middlewares
- 调用 page middlewares
- 根据返回结果执行拦截
Warning
尽可能不要使用异步中间件,虽然最终会执行,但并不能阻止导航