gpt4 book ai didi

javascript - 是否可以使用快速路线正则表达式中的捕获组?

转载 作者:行者123 更新时间:2023-12-02 23:31:32 25 4
gpt4 key购买 nike

我正在使用 GOV.UK 原型(prototype)套件开发一个相当大的 Node/express 应用程序。我已将原型(prototype)的多个实例分成独立版本以用于存档目的,例如这不是“干”一次构建的方法,而是随着原型(prototype)的发展(有时显着)存在相当多的重复。关键是每个版本例如/phase/release/适当分开。

我已经很好地分离了路由,但最后有帮助的是有一个动态的route.use -> require,这样我就不必手动更新每个路由的顶级routes.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) 作为 require 路径的一部分。

我希望有一种方法可以在构建的 require 路径中使用之前已知的信息,但我只是不知道如何使用。

非常感谢任何意见/帮助。

最佳答案

希望我正确理解你的问题。

如果 _routes.js 导出一个路由器,它本质上是一个接受 req、res、next 参数的函数,那么你可以这样做:

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

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

});

关于javascript - 是否可以使用快速路线正则表达式中的捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56475086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com