On this page
路由404页面配置方法
在Vue Router中如何配置未匹配路由时的404页面?请说明通配符路由的两种写法(’‘与’/:pathMatch(.)*’)的区别,并解释为何需要将404路由配置在路由列表末尾。
考察点分析
该题目主要考察以下核心能力维度:
- 路由配置能力:是否掌握Vue Router基础配置及错误处理机制
- 动态路由理解:对路径匹配语法及正则表达式的应用能力
- 路由匹配机制:对路由优先级和匹配顺序的深入理解
具体评估点:
- 通配符路由的两种实现方式及适用场景
- 路由匹配优先级规则
- 动态参数捕获原理
- 路由配置顺序的重要性
技术解析
关键知识点
- 路由匹配顺序
- Vue Router路径匹配语法
- 通配符路由实现原理
原理剖析
Vue Router使用routes
数组的顺序进行路由匹配,遵循先到先得原则。当使用通配符路由时:
'*'
是Vue Router 3的遗留语法,匹配任意路径但不捕获路径片段'/:pathMatch(.*)*'
是Vue Router 4推荐写法,使用正则表达式:.*
匹配任意字符(含斜杠)- 尾部
*
使参数成为数组,保留嵌套路由匹配结果
常见误区
- 将404路由放在非末位导致正常路由无法匹配
- 混淆Vue Router版本差异导致参数获取失败
- 未正确处理动态路由优先级(如将
/user/:id
放在通配符路由之后)
问题解答
在Vue Router中配置404页面的实现方法:
const routes = [
// 其他路由...
{
path: '/:pathMatch(.*)*',
component: NotFound
}
]
两种通配符写法区别:
'*'
(Vue Router 3风格):- 直接匹配所有路径
- 无法获取详细路径参数
- 不支持嵌套路由匹配
'/:pathMatch(.*)*'
(Vue Router 4推荐):- 通过正则表达式精确匹配
- 保留完整路径参数(通过
$route.params.pathMatch
获取) - 支持嵌套路由场景
路由顺序要求原理:
路由匹配遵循顺序优先原则。若将通配符路由前置,会优先捕获所有请求导致正常路由失效。放置在末尾可确保先尝试匹配有效路由,最后处理未匹配情况。
解决方案
编码示例
import { createRouter } from 'vue-router'
const router = createRouter({
routes: [
{ path: '/', component: Home },
{ path: '/about', component: About },
// 必须置于最后
{
path: '/:pathMatch(.*)*', // 捕获完整路径
component: () => import('./views/404.vue'),
meta: { title: '页面丢失' }
}
]
})
// 404组件内获取路径
export default {
mounted() {
console.log(this.$route.params.pathMatch) // 输出未匹配的路径数组
}
}
优化建议
- 服务端配合:配置服务端路由兜底返回index.html
- 性能优化:使用路由懒加载404组件
- 用户体验:页面保留导航能力,提供返回首页按钮
深度追问
如何处理动态路由的404状态?
答:在动态路由的beforeEnter
守卫中进行API验证,验证失败时重定向到404SPA应用如何避免直接访问不存在的子路由?
答:需配置服务器路由重定向规则(如Nginx的try_files)如何自定义404页面的路径参数显示?
答:通过$route.params.pathMatch
获取未匹配路径进行个性化展示
Last updated 06 Mar 2025, 13:07 +0800 .