捕获路径中带括号的路由
Catching route with parentheses in the path
我有一个 NodeJS 网络应用程序。我用这段文字传播了一条路线:
great impact (learn more at emotionathletes.org/impact)
路线/impact
存在,路线/impact)
不存在。一些电子邮件客户端在路由中包含右括号,我想重定向它。如果我使用:
router.get("/impact)", (req, res) => {
res.redirect("/impact");
});
我收到这个错误:
~/emotionathletes/server/node_modules/path-to-regexp/index.js:128
return new RegExp(path, flags);
^
SyntaxError: Invalid regular expression: /^\/impact)\/?$/: Unmatched ')'
我了解路由字符串作为正则表达式的输入,其中括号用于捕获组,因此不能包含括号。使用 HTML 个实体,例如 /impact%29
不会捕获路由 /impact)
.
一个解决方案是通用处理程序,例如:
router.get("/:token", async (req, res, next) => {
// Remove parenthesis in the route path.
let newPath = req.originalUrl.replace(")", "").replace("(", "");
if (newPath != req.originalUrl) {
return res.redirect(newPath);
}
// Any other routes, such as 404.
// ...
}
在 NodeJS 中捕获带括号的路由的正确方法是什么?
尝试将 unicode 表达式 [\u0029 = )
] 与正则表达式
结合使用
router.get(/impact\u0029/, (req, res) => { ... }
如果您有多条路线遇到同样的问题,我认为您的第二种方法更合适。如果只有一条路由,那么可以使用上面的方案。
我有一个 NodeJS 网络应用程序。我用这段文字传播了一条路线:
great impact (learn more at emotionathletes.org/impact)
路线/impact
存在,路线/impact)
不存在。一些电子邮件客户端在路由中包含右括号,我想重定向它。如果我使用:
router.get("/impact)", (req, res) => {
res.redirect("/impact");
});
我收到这个错误:
~/emotionathletes/server/node_modules/path-to-regexp/index.js:128
return new RegExp(path, flags);
^
SyntaxError: Invalid regular expression: /^\/impact)\/?$/: Unmatched ')'
我了解路由字符串作为正则表达式的输入,其中括号用于捕获组,因此不能包含括号。使用 HTML 个实体,例如 /impact%29
不会捕获路由 /impact)
.
一个解决方案是通用处理程序,例如:
router.get("/:token", async (req, res, next) => {
// Remove parenthesis in the route path.
let newPath = req.originalUrl.replace(")", "").replace("(", "");
if (newPath != req.originalUrl) {
return res.redirect(newPath);
}
// Any other routes, such as 404.
// ...
}
在 NodeJS 中捕获带括号的路由的正确方法是什么?
尝试将 unicode 表达式 [\u0029 = )
] 与正则表达式
router.get(/impact\u0029/, (req, res) => { ... }
如果您有多条路线遇到同样的问题,我认为您的第二种方法更合适。如果只有一条路由,那么可以使用上面的方案。