我有一个类用于创建路由,另一个类用于捆绑路由,然后将它们添加到Express应用程序或Express路由器。问题出在我的route类中,当我用route参数创建一个route,然后尝试将其连接到一个express应用程序时(例如:/API/:myparam => myparam在本例中是一个路由参数)RegExp抛出一个SyntaxError。我将向您展示每条路线连接到express应用程序时会发生什么:
// "this" is the route
// "this.path" is a string
// "this.type" is "GET" or "POST"
// "RouteFunction" type is a normal express route function=
connectToRouter(router: Router | Express, routerPath: string, globalMiddlewares?: RouteFunction[]) {
router[this.type.toLowerCase()](
path.join(routerPath, this.path),
...globalMiddlewares,
...this.middlewares,
this.functions,
);
}
字符串
基本上在这里,router
是express应用程序,如果类型是GET
,则通过执行router[type.toLoweCase()]
,我将访问router.get
。
如果我通过app.get
添加一个路由,我可以将路由参数添加到字符串(app.get("/:myparam", func)
)中,但是当我按照我向你展示的方式进行操作时,我会得到一个语法错误。
错误代码:
return new RegExp(path, flags);
^
SyntaxError: Invalid regular expression: /^\api\v1\discounts\store\storeName\(?:([^\/]+?))\/?$/: Unmatched ')'
at new RegExp (<anonymous>)
at pathtoRegexp (C:\Users\User\Documents\wowl-discount-tracker\discount-tracker\node_modules\path-to-regexp\index.js:128:10)
at new Layer (C:\Users\User\Documents\wowl-discount-tracker\discount-tracker\node_modules\express\lib\router\layer.js:45:17)
at Function.route (C:\Users\User\Documents\wowl-discount-tracker\discount-tracker\node_modules\express\lib\router\index.js:505:15)
at app.<computed> [as get] (C:\Users\User\Documents\wowl-discount-tracker\discount-tracker\node_modules\express\lib\application.js:498:30)
at Route.connectToRouter (file:///C:/Users/User/Documents/wowl-discount-tracker/discount-tracker/dist/lib/route/route.js:5:40)
at file:///C:/Users/User/Documents/wowl-discount-tracker/discount-tracker/dist/lib/route/routeWrap.js:10:15
at Array.forEach (<anonymous>)
at RouteWrap.connectToRouter (file:///C:/Users/User/Documents/wowl-discount-tracker/discount-tracker/dist/lib/route/routeWrap.js:9:21)
at file:///C:/Users/User/Documents/wowl-discount-tracker/discount-tracker/dist/api/index.js:32:15
型
我尝试创建的路由路径是这样的:GET
\api\v1\discounts\store\:storeName\
(由path.join生成)
也许问题出在path.join生成的反斜杠上,有谁知道一种方法让它变成普通的斜杠吗?而不是用正常的斜线替换所有的。
编辑:这(^)实际上是真的,问题是关于反斜杠。我使用这个简单的替换函数来反转斜线,它工作了。
const routePath = path.join(routerPath, this.path);
const pathWithReversedSlashes = routePath.replace(/\\/g, '/');
型
如果有人有更简单的方法来做到这一点,也许在path.join
方面,我想听听。
1条答案
按热度按时间bn31dyow1#
不使用
path.join
,而使用模板文字。仅供参考-这与
path.join
生成的反斜杠有关。发件人:
字符串
收件人:
型