阅读时间:1 分钟
0 字
页面运行时
真实页面从模块页变成“真正可进入页面”的过程,主要发生在页面运行时层。
整体流程
text
1. sync 扫描页面和 <route> route 配置
2. 生成 src/pages/feature/secure.vue
3. 包装页里调用 definePage()
4. 包装页里调用 usePageRuntime('feature.secure')
5. 等待 dux.ready
6. 运行页面中间件链
7. 通过后再渲染真实页面definePage
你通常只会在自动生成包装页里看到它。
作用:
text
把页面最终解析后的静态页面 Route 固化下来业务页本身还是优先写 <route lang="json">。
usePageRuntime
它位于:
text
src/runtime/router/page.ts负责:
text
等待 runtime ready
找到当前页面 route 配置
执行中间件
处理拦截结果
允许时设置 ready = true返回值:
text
ready => 页面是否允许渲染
fallbackComponent => 中间件返回的兜底组件中间件链从哪里来
页面运行时只负责“执行”中间件链。
中间件链本身来自:
text
页面 Route 里的 middleware
页面 Route 里的 auth / guestOnly / permission
模块入口里注册的 middlewares字段怎么写,优先看:
handler 可以返回什么
text
undefined => 通过,继续下一个中间件
false => 阻断当前页面
string => 视为重定向路径
{ redirectTo } => 显式重定向
{ component } => 返回 fallback 组件页面重定向怎么发生
如果中间件返回:
ts
'/pages/auth/login'或:
ts
{ redirectTo: '/pages/auth/login' }包装运行时会调用:
ts
dux.navigator.reLaunch(...)并阻止真实页面渲染。
fallback component 是什么
如果中间件返回:
ts
{
component: ForbiddenComponent,
}那么包装页不会进入真实页面,而是直接渲染这个兜底组件。
适合:
text
权限不足但不想跳页
页面级兜底内容permission 中间件
permission 是 runtime 自带注册的。
它会:
text
1. 读取页面 permission
2. 调用 authProvider.can()
3. 无权限时重定向或渲染 fallback component常见排查方式
页面进不去
先看:
text
<route> 是否写了 auth / permission
模块是否注册了对应中间件
authProvider.can() 是否返回 false页面白屏但没报错
重点排查:
text
是否被中间件阻断
是否存在 fallbackComponent
生成的 src/pages/* 是否已更新改了路由声明但没生效
先执行:
bash
pnpm sync:uni