Сложный редирект в vue router - PullRequest
       14

Сложный редирект в vue router

0 голосов
/ 05 февраля 2019

Я использую vue-router в многостраничном приложении;мы добавляем режим истории, потому что наши требования настаивают на том, чтобы наши URL-адреса не содержали специальных символов (#), и хотим убедиться, что из нашего кода внешнего интерфейса мы всегда добавляем к нашим клиентским маршрутам /v/.(чтобы избежать необходимости обновлять все наши маршруты во всем приложении и централизовать эту функцию).

Я хочу добавить маршрут, подобный следующему:

routes: [
    // add `v/` to paths that don't start with `v/`
    { 
      path: `(^\/(?!v))*`, 
      redirect: to => `/v/${to}` 
    },
]

На основе использования регулярных выражений внутри path-to-regexp , но из их документации мне не совсем понятно, как правильно передать весь маршрут как регулярное выражение (или это возможно?), Особенно без попадания в цикл перенаправления.

1 Ответ

0 голосов
/ 07 февраля 2019

Мне удалось использовать 2 перенаправления для достижения того, что мне нужно (в данном случае возврат к «/» как 404.

// Fallback to baseRoute for prefixed unmatched routes
{ path: `${prefix}/*`, redirect: '/' },
// Fallback to baseRoute for unprefixed, unmatched routes (try again with prefix)
{ path: `*`, redirect: to => prefix + to.path }

(Интересный момент заключается в том, что в функции перенаправлениязначение to остается неизменным, если вы перенаправлены, поэтому у меня изначально был бесконечный цикл с to => to.path.startsWith(prefix) ? '/' : prefix + to.path)

...