如何在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
由于
答案 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的过程有点不可预测。