WIP 在 Vite 驱动的 uni-app 中使用路由中间件
pnpm i -D @uni-helper/vite-plugin-uni-middleware
// vite.config.ts
import { defineConfig } from "vite";
import Uni from "@dcloudio/vite-plugin-uni";
import UniMiddleware from "@uni-helper/vite-plugin-uni-middleware";
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
的类型
declare module "@uni-helper/vite-plugin-uni-pages" {
export interface PagesConfig {
middleware: string[];
}
}
export {};
若要为页面添加配置,只需使用 route-block
<route>
{
"middleware": ["auth"]
}
</route>
- vite
- 扫描 middlewareDir 和 pages.json
- 提供虚拟模块并导出 middlewares
- runtime
- 混入页面生命周期 onShow
- 调用 global middlewares
- 调用 page middlewares
- 根据返回结果执行拦截
Warning 尽可能不要使用异步中间件,虽然最终会执行,但并不能阻止导航