Express Node.js框架:如何通过replace一个命名的参数段来重新编写一个URL?

在我的Express应用程序中,当路线中的某些参数符合某些条件时,我想使用路线参数前提条件执行一些redirect。 作为一个例子,假设我希望将参数word转换为全部大写,如果还没有的话。

参数word可能出现在几个不同的路由中,例如/:word/foo/:word/foo/:word/bar等等。幸运的是,在路由参数前提下,例如(CoffeeScript中的代码):

 app.param 'word', (req, res, next, word) -> if word isnt word.toUpperCase() new_URL = // current URL, but replace word with word.toUpperCase() // res.redirect new_URL, 301 

我的问题是关于如何构造new_URL ,用它的大写等价物replace:word 。 我希望能够使用相同的函数构造new_URL ,而不pipe当前正在使用哪条path。

我看到有req.route ,但没有定义。 我想我可以通过req.app.routes.routes.get[req._route_index]访问当前匹配的路由,然后拆分path ,并重新构build它,但似乎过于复杂。 有没有办法简单地迭代当前路线的path段? 谢谢!

我最终写了一个小函数来replace一个新的值的命名路由参数。 我不确定这是一个最佳的解决scheme,它不是一个完整的解决scheme(它绝对不会用于像/:from-:to这样的名为params的nob段)。

 replaceRouteParam = (req, param, replacement) -> segments = req.app.routes.routes.get[req._route_index].path.split('/') new_segments = [] for segment in segments if segment is param new_segments.push replacement else if segment[0] is ':' new_segments.push req.params[segment[1..]] else new_segments.push segment new_segments.join '/' 

我在多个位置(我的错误,路由等等,在不同的文件中)使用这个函数的build议是把它们放在一个单独的文件中,并要求它在任何需要它的文件中使用。