NodeJS 语法错误:使用路由参数创建路由时正则表达式无效

y4ekin9u  于 2023-08-04  发布在  Node.js
关注(0)|答案(1)|浏览(127)

我有一个类用于创建路由,另一个类用于捆绑路由,然后将它们添加到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方面,我想听听。

bn31dyow

bn31dyow1#

不使用path.join,而使用模板文字。
仅供参考-这与path.join生成的反斜杠有关。

发件人

path.join(routerPath, this.path)

字符串

收件人

`${routerPath}/${this.path}`

相关问题