【问题标题】:Duplicate named routes definition Error even though all child routes names are different即使所有子路由名称不同,命名路由定义重复也会出错
【发布时间】:2025-12-13 14:05:02
【问题描述】:

我收到此错误 [vue-router] 重复命名路由定义:即使我有不同的路由名称。我尝试在 * 和 google 中搜索此问题,但找不到此问题的解决方案。

我的 route.js 文件。

const routes = [
  {
    path: '/',
    component: () => import('layouts/MainDashboard.vue'),
    children: [
      {
        path: '', name: 'LandingPage', component: () => import('pages/LandingPage.vue'), meta: { requiresAuth: false }
      },
      {
        path: '/product_details/:productId', name: 'ProductDetails', component: () => import('pages/ProductDetails.vue'), meta: { requiresAuth: false }
      },
      { path: '/cart', name: 'Cart', component: () => import('../cart/ShoppingCart.vue'), meta: { requiresAuth: false } },
      { path: '/checkout', component: () => import('../cart/CheckoutComponent.vue'), meta: { requiresAuth: true } },

      { path: '/page/:cardTitle', component: () => import('../pages/ProductListPage.vue'), meta: { requiresAuth: false } },
      { path: '/account', name: 'Account', component: () => import('../account/AccountComponent.vue'), meta: { requiresAuth: false } },
      {
        path: '/accounttype', component: () => import('../account/AccountType.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/orders', component: () => import('../account/Orders.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/address', component: () => import('../account/Address.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/addAddress', component: () => import('../account/AddAddress.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/loginSecurity', component: () => import('../account/LoginSecurity.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/wishLists', component: () => import('../account/WishLists.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/requestProduct', name: 'RequestProduct', component: () => import('pages/RequestProduct.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/trackYourOrder', name: 'OrderTracker', component: () => import('pages/OrderTracker'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/sell', name: 'Sell', component: () => import('pages/Sell.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/help', name: 'Help', component: () => import('pages/Help.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/contact', name: 'Contact', component: () => import('pages/Contact.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/vouchers', component: () => import('pages/Vouchers.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/customerCare', component: () => import('../components/CustomerCare.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/dailyGroceries', component: () => import('../components/DailyGroceries.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/stores', component: () => import('../components/Stores.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/searchResult', component: () => import('../pages/SearchResult.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/categories', name: 'Categories', component: () => import('../pages/Categories.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/categories/:categoryName', component: () => import('../pages/CategoriesListPage.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/history', component: () => import('../pages/BrowsingHistory.vue'), meta: { requiresAuth: false }, props: true
      },
      {
        path: '/notifications', name: 'Notifications', component: () => import('pages/Notifications.vue'), meta: { requiresAuth: false }, props: true
      }
    ]
  }
]

// Always leave this as last one
if (process.env.MODE !== 'ssr') {
  routes.push({
    path: '*',
    component: () => import('pages/Error404.vue')
  })
}

export default routes

请提出这里有什么问题。请参考随附的快照。如您所见,即使路线名称不同,它也会显示路线错误。

Vue 路由器创建代码:

index.js

import Vue from 'vue'
import VueRouter from 'vue-router'

import routes from './routes'

const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push (location) {
  return originalPush.call(this, location).catch(err => err)
}

Vue.use(VueRouter)

export default function (/* { store, ssrContext } */) {
  const Router = new VueRouter({
    scrollBehavior: () => ({ x: 0, y: 0 }),
    routes,

    // Leave these as is and change from quasar.conf.js instead!
    // quasar.conf.js -> build -> vueRouterMode
    // quasar.conf.js -> build -> publicPath
    mode: process.env.VUE_ROUTER_MODE,
    // mode: 'history',
    base: process.env.VUE_ROUTER_BASE
  })
  return Router
}

【问题讨论】:

  • 您能在创建 Vue 路由器的地方添加代码吗?
  • 你好@DelenaMalan。我已经编辑了我的问题以添加 Vue Router index.js
  • 您的index.js 文件导出了一个创建路由器的函数...那么您在哪里调用此函数以及多久调用一次?你对返回的Router 实例做了什么?

标签: vue.js vue-router


【解决方案1】:

删除属性name,此消息不再显示。

例如:

{ path: '/cart', component: () => import('../cart/ShoppingCart.vue'), meta: { requiresAuth: false } }

【讨论】: