Как исключить директорию из проверки catchALL?

Вот правило vue-router, которое не работает:

{
    path: "/:catchAll(^(?!specialFolder).*)",
    name: 'NotFound',
    component: NotFound
},

Подскажите, пожалуйста, как исключить директорию из проверки на 404 страницу? Чтобы при отсутствии файла в данной директории не было перехода на 404, а выбрасывалась ошибка, которую можно отловить в catch?

axios.get('/specialFolder/' + filename + '.txt').catch(()=>console.log('file not found'));

Ответы (1 шт):

Автор решения: yar85

В vue-router версии 4.* похоже ожидается такой синтаксис шаблона:

{
  path: '/:catchAll(specialFolder(.*)*)',
  name: 'NotFound',
  component: NotFound
},

, либо

{
  path: '/specialFolder',
  /* .... */
  children: [
    {
      path: ':catchAll(.*)*',
      name: 'NotFound',
      component: NotFound
    },
  ],
},

Таким образом, в пропс catchAll маршрута должен попадать массив фрагментов пути, например ['foo', 'bar.txt'] при запросе /specialFolder/foo/bar.txt.

// В первом случае, я не уверен относительно попадания фрагмента 'specialFolder' в массив, и не будет ли он соединен с последующим фрагментом - это надо проверять практически. Даже сомнительно что первый вариант вообще будет работать как предполагается - опять же, нужны практические тесты, смотреть что приходит в пропс и т.д..


Регулярки в шаблонах теперь не используются! То есть, шаблоны в PCRE-like синтаксисе, но это не буквально рег.выражения... библиотека использует свой собственный разбор шаблонов.
См. описание соотв. ломающего изменения в руководстве по миграции, глава Catch all / 404 Not found Route:

Vue Router doesn't use path-to-regexp anymore, instead it implements its own parsing system that allows route ranking and enables dynamic routing.

→ Ссылка