Как исключить директорию из проверки 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 шт):
В 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-regexpanymore, instead it implements its own parsing system that allows route ranking and enables dynamic routing.