我有一条像/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
答案 0 :(得分:0)
我到目前为止提出的最佳解决方案是使用upperCased参数替换baseUrl中的原始参数。但是,这可能会导致冲突,它会使URl的其他部分成为我的参数的一部分。
let redirectPath = req.originalUrl.replace(req.params.userTag, userTagUpperCased)
return res.redirect(301, redirectPath)