我有一条像/users/HGB8J/
这样的路由,如果用户不只使用大写字母作为userTag
,我想做一个 301 重定向。我正在尝试编写一个中间件,以确保多个路由的大写userTag
如下所示。
我的问题:
如何仅使用修改后的参数(在本例中为大写userTag
(重定向到"原始网址">
function ensureTagIsUppercased(req, res, next) {
let userTag = req.params.userTag
if(userTag === userTag.toUpperCase())
next()
// How can I build the same URL just with the uppercased userTag?
let url = ''
return res.redirect(301, url)
}
router.get('/:userTag', ensureTagIsUppercased, profile)
router.get('/:userTag/refresh', ensureTagIsUppercased, refreshProfile)
例子:
用户请求 => https://example.com/users/HGB8J/请求可以通过
用户请求 => https://example.com/users/hgB8J/应将其重定向到 https://example.com/users/HGB8J/
用户请求 => https://example.com/users/hgB8J/refresh 应将其重定向到 https://example.com/users/HGB8J/refresh
到目前为止,我想出的最佳解决方案是将baseUrl中的原始参数替换为upperCased参数。但是,这可能会导致冲突,其中 URl 的其他部分大写,这些部分不属于我的参数。
let redirectPath = req.originalUrl.replace(req.params.userTag, userTagUpperCased)
return res.redirect(301, redirectPath)