Как извлечь только маршруты из Vue Router для создания карты сайта - PullRequest
1 голос
/ 18 мая 2019

У меня есть файл, экспортирующий мой экземпляр VueRouter:

// src/js/router.js

import VueRouter from "vue-router";

export default new VueRouter({
  mode: "history",
  routes: [
    {
      name: "home",
      path: "/",
      component: "./component/Home.vue"
    },
    {
      name: "contact-us",
      path: "/contact-us",
      component: "./component/ContactUs.vue"
    }
  ]
});

ПОПЫТКА

Я пытался выполнить этот файл:

// test.js

import router from "./src/js/router.js";

Использование узла:

node --experimental-modules test.js

Но я столкнулся с этой ошибкой:

$ node --experimental-modules test.js (узел: 13688) ExperimentalWarning: Загрузчик модуля ESM является экспериментальным. C: \ XAMPP \ HTDOCS \ экстракт-маршруты из-Вю-маршрутизатор \ test.js: 1 (функция (export, require, module, __filename, __dirname) {импортировать маршрутизатор из> "./src/js/router.js"; ^^^^^^

SyntaxError: Неожиданный идентификатор в новом скрипте (vm.js: 80: 7) в createScript (vm.js: 274: 10) в Proxy.runInThisContext (vm.js: 326: 10) в Module._compile (внутренний / modules / cjs / loader.js: 664: 28) в Object.Module._extensions..js (внутренняя / modules / cjs / loader.js: 712: 10) в Module.load (внутренний / modules / cjs / loader.js: 600: 32) в tryModuleLoad (внутренняя / modules / cjs / loader.js: 539: 12) в Function.Module._load (внутренняя / modules / cjs / loader.js: 531: 3) в createDynamicModule (внутренняя / modules / esm / translationators.js: 73: 15) в Object.meta.done (внутренняя / modules / esm / create_dynamic_module.js: 42: 9)

ВОПРОС

Как извлечь из роутера только ключи path? Я хотел бы создать карту сайта на основе маршрутов моего маршрутизатора.

1 Ответ

0 голосов
/ 24 мая 2019

На этом сайте есть пример получения всех маршрутов в виде массива ссылок:

const router = new Router({ /* Your Router config go here */ });

function getRoutesList(routes, pre) {
  return routes.reduce((array, route) => {
    const path = `${pre}${route.path}`;

    if (route.path !== '*') {
      array.push(path);
    }

    if (route.children) {
      array.push(...getRoutesList(route.children, `${path}/`));
    }

    return array;
  }, []);
}

getRoutesList(router.options.routes, 'https://zigamiklic.com');

Пример вывода:

[
   'https://zigamiklic.com/home',
   'https://zigamiklic.com/settings/',
   'https://zigamiklic.com/settings/general',
   'https://zigamiklic.com/settings/profile',
   'https://zigamiklic.com/contact',
]

Если вам не нужен префикс, вы можете использовать его следующим образом:

getRoutesList(router.options.routes, '');
...