Я работаю над довольно большим узлом / экспресс-приложением, используя комплект прототипов 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
) как части требуемого пути.
Я ожидаю, что будет способ использоватьинформация, известная до создания запроса в созданном пути запроса, но я просто не могу понять, как.
Любой вклад / помощь очень ценится.