Экспресс массив маршрутов - PullRequest
       38

Экспресс массив маршрутов

0 голосов
/ 01 октября 2019

В экспресс-документации говорится, что вы можете предоставить массив для переменной пути в app.use (). Я пытаюсь, чтобы все маршруты в массиве маршрутов указывали на статическую папку в статической переменной. Вот что у меня есть:

const static = express.static(path.join(__dirname, '../build'));
const routes = ['/','/projects','/project1','/blog']
app.use(routes, static);

Все эти маршруты работают корректно со статической переменной папки, если я пишу отдельную функцию app.use () для каждого маршрута, но это было бы намного проще в обслуживании, если бы яможно получить маршруты в массиве, как в документации. В документации нет примеров, показывающих, что мне нужно отобразить массив.

1 Ответ

2 голосов
/ 01 октября 2019

Таким образом, (исходя из экспериментов, поскольку этого нет в документе), кажется, что когда вы передаете массив маршрутов, Express находит первый элемент в массиве, который совпадает с текущим путем, и вызывает обработчик маршрута для этого. только. Даже если есть другие маршруты, которые также будут соответствовать (как в вашем случае), он не будет повторно вызывать обработчик маршрута для них.

Так, потому что '/' соответствует ВСЕМ маршрутам при использовании с app.use(),он всегда будет использовать этот, и, следовательно, другие никогда не будут работать должным образом при использовании массива, но будут работать правильно, когда указаны в качестве отдельных маршрутов. Вы можете исправить это, убедившись, что самые разрешающие маршруты являются последними. Итак, измените ваш массив следующим образом:

const static = express.static(path.join(__dirname, '../build'));
const routes = ['/projects','/project1','/blog', '/'];
app.use(routes, static);

Это переместит '/' в конец, так что остальные получат шанс на совпадение до того, как будет рассмотрен '/' и. '/' будет использоваться только тогда, когда путь не был другим../build каталог для express.static(), чтобы посмотреть там. Там нет причин, вам нужно сделать это таким образом. Это кажется искусственно созданной проблемой из-за вашего дизайна URL. Это приведет к тому, что URL-адреса, такие как /x.js, /projects/x.js и /blog/x.js, будут преобразованы в точно такой же файл x.js в каталоге ../build.

...