Vue3中路由配置Catch all routes (“*“) must .....问题

2024-02-08 11:12

本文主要是介绍Vue3中路由配置Catch all routes (“*“) must .....问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Vue3中路由配置Catch all routes (“*”) must …问题

文章目录

  • Vue3中路由配置Catch all routes ("*") must .....问题
  • 1. 业务场景描述
    • 1. 加载并添加异步路由场景
    • 2. vue2中加载并添加异步路由(OK)
    • 3. 转vue3后不好使(Error)
      • 1. 代码
      • 2. 错误
  • 2. 处理方式
    • 1. 修改前
    • 2. 修改后
    • 3. vue3中完整代码案例

1. 业务场景描述

1. 加载并添加异步路由场景

从vue2项目转换为Vue3项目时,路由导航守卫中加载后端返回的动态路由,并配置未识别的路由自动跳转指定错误页面(如404页面)时,出现了ue-router.mjs:1321 Uncaught (in promise) Error: Catch all routes ("*") must now be defined using a param with a custom regexp 的问题

2. vue2中加载并添加异步路由(OK)

Vue2中路由导航守卫中加载动态路由案例代码如下

let asyncRouter = []
// 路由导航守卫中,加载动态路由
router.beforeEach((to, from, next) => {if (whiteList.indexOf(to.path) !== -1) {next()} else {const token = tokenStore.get('token')if (token) {dbApi.getRouter({}).then((response) => {const res = response.dataasyncRouter = res.dataasyncRouter.push({       component: "error/404",name: "404",path: "*" //问题主要出现在这里});store.commit('setRouters', asyncRouter)goTo(to, next,asyncRouter)})} else {if (to.path === '/') {next()}}}
})router.afterEach(() => {//....
})function goTo(to, next,asyncRouter) {router.addRoutes(asyncRouter) //注意这里时Vue2中添加路由的方法,与Vue3有所区别next({...to, replace: true})
}

3. 转vue3后不好使(Error)

1. 代码

let asyncRouter = []
// 路由导航守卫中,加载动态路由
router.beforeEach((to, from, next) => {if (whiteList.indexOf(to.path) !== -1) {next()} else {const accountStore = useAccountStore();const token = accountStore.tokenif (token) {dbApi.getRouter({}).then((response) => {const res = response.dataasyncRouter = res.dataasyncRouter.push({       component: "error/404",name: "404",path: "*" //问题主要出现在这里});store.commit('setRouters', asyncRouter)goTo(to, next,asyncRouter)})} else {if (to.path === '/') {next()}}}
})router.afterEach(() => {//....
})function goTo(to, next,asyncRouter) {asyncRouter.forEach((route) => {     router.addRoute(route) //注意这里vue3添加路由方式,与Vue2有所区别})next({...to, replace: true})
}

2. 错误

在这里插入图片描述

详细信息如下

vue-router.mjs:1321  Uncaught (in promise) Error: Catch all routes ("*") must now be defined using a param with a custom regexp.
See more at https://next.router.vuejs.org/guide/migration/#removed-star-or-catch-all-routes.at Object.addRoute (vue-router.mjs:1321:23)at Object.addRoute (vue-router.mjs:2986:24)at index.ts:119:16at Array.forEach (<anonymous>)at go (index.ts:117:17)at index.ts:93:25

2. 处理方式

未识别的路由自动跳转指定错误页面(如404页面)时,将路由中的path配置{ path: "*"}改为{path: "/:catchAll(.*)"}即可

1. 修改前

 asyncRouter.push({       component: "error/404",name: "404",path: "*"});

2. 修改后

 asyncRouter.push({       component: "error/404",name: "404",path: "/:catchAll(.*)"});

3. vue3中完整代码案例

let asyncRouter = []
// 路由导航守卫中,加载动态路由
router.beforeEach((to, from, next) => {if (whiteList.indexOf(to.path) !== -1) {next()} else {const accountStore = useAccountStore();const token = accountStore.tokenif (token) {dbApi.getRouter({}).then((response) => {const res = response.dataasyncRouter = res.dataasyncRouter.push({       component: "error/404",name: "404",path: "/:catchAll(.*)"});store.commit('setRouters', asyncRouter)goTo(to, next,asyncRouter)})} else {if (to.path === '/') {next()}}}
})router.afterEach(() => {//....
})function goTo(to, next,asyncRouter) {asyncRouter.forEach((route) => {     router.addRoute(route) //注意这里是vue3添加路由方式,与Vue2有所区别})next({...to, replace: true})
}

这篇关于Vue3中路由配置Catch all routes (“*“) must .....问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/690842

相关文章

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

maven私服配置全过程

《maven私服配置全过程》:本文主要介绍maven私服配置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录使用Nexus作为 公司maven私服maven 私服setttings配置maven项目 pom配置测试效果总结使用Nexus作为 公司maven私