Можно ли использовать группы захвата из регулярного выражения экспресс-маршрута? - PullRequest
0 голосов
/ 06 июня 2019

Я работаю над довольно большим узлом / экспресс-приложением, используя комплект прототипов GOV.UK.Я разделил несколько экземпляров прототипа на автономные версии для архивных целей, например, это не сборка, когда «сухой» подход, а скорее довольно частое дублирование по мере развития прототипов (иногда значительно).Важно то, что каждая версия, например / phase / release /, надлежащим образом отделена.

Я довольно хорошо разделил маршруты, но последнее, что могло бы помочь, - иметь динамический route.use -> requireтак что мне не нужно вручную обновлять файл rout.js верхнего уровня для каждого выпуска версии.

Я довольно часто использую сопоставление регулярных выражений в своих маршрутах, так что я довольно знаком с этим, но чтоМне интересно, как я могу использовать детали матча для динамического построения запроса.Или, возможно, использовать что-то в req.params - но я не думаю, что это доступно вне маршрута.

Вот схема моего кода.Статический маршрут (R1) работает нормально, но ни один из динамических маршрутов (R2 / R3) не работает (без комментариев):

const express = require('express')
const router = express.Router()

router.use('/:phase/:release', function (req, res, next) {

  // Make phase and release available in subsequent routes
  let prototype = {}
  prototype.phase = req.params.phase
  prototype.release = req.params.release
  req.session.data.prototype = prototype

  next()

})

// Phase/release specific routes
// -----------------------------

// R1. This works
router.use('/test/a/', require('./views/test/a/_routes.js'));

// R2. But a dynamic version world be better?...
// router.use(/(alpha|beta|test)\/([abc])\//, require('./views/' + \1 + '/' + \2 '/_routes.js'));
// R3. ...or...
// router.use('/:phase/:release/', require('./views/' + req.params.phase + '/' + req.params.release '/_routes.js'));

В конечном счете, я считаю, что мой подход неверен и что невозможно ссылаться на регулярное выражениезахватывать группы таким образом, но в равной степени я не думаю, что могу получить доступ к объекту req (и, следовательно, req.params) как части требуемого пути.

Я ожидаю, что будет способ использоватьинформация, известная до создания запроса в созданном пути запроса, но я просто не могу понять, как.

Любой вклад / помощь очень ценится.

1 Ответ

1 голос
/ 06 июня 2019

Надеюсь, я правильно понимаю ваш вопрос.

Если _routes.js экспортирует маршрутизатор, который является функцией, которая принимает req, res, следующие параметры, тогда вы можете сделать это:

router.use('/:phase/:release/', function(req, res, next){

    var anotherRouter = require('./views/' + req.params.phase + '/' + req.params.release '/_routes.js');
    anotherRouter(req, res, next);

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...