Express:逻辑或路由

时间:2017-11-02 15:06:40

标签: node.js regex express

如何在Express(v4.15)路由中使用OR条件指定正则表达式?

我希望以下路由指向相同的方法

/video/:videoId
/movies/:videoId
/media/:videoId

当我尝试

app.get('/(video|media|movies)/:videoId', this.redirectToVideo.bind(this));

我收到以下错误

SyntaxError: Invalid regular expression: /^\/(?(?:([^\/]+?))|media|movies)\/(?:([^\/]+?))\/?$/: Invalid group

当我尝试没有()

app.get('/video|media|movies/:videoId', this.redirectToVideo.bind(this));

前两条路线有效,但不是那条路线

 /media/:videoId

由于

2 个答案:

答案 0 :(得分:2)

我只会为你的路线使用一个数组:

app.get(['/video/:videoId', '/movies/:videoId', '/media/:videoId'], this.redirectToVideo.bind(this))

编辑:

如果您想使用Regex,这也可以:

app.get('(\/video|\/media|\/movies)/:videoId', this.redirectToVideo.bind(this)))

答案 1 :(得分:1)

使用虚拟参数应该有效:

app.get('/:prefix(video|media|movies)/:videoId', ...);

用于从路径路径生成RegExp的过程有点不可预测。