ExpressJS 路由正则表达式:如何将参数与除一条路由之外的所有内容匹配

cod*_*eto 3 regex node.js express

我有一个定义类似的路由来捕获code参数:

app.get('/:code([a-zA-Z]{3})', codeHandler);
Run Code Online (Sandbox Code Playgroud)

它匹配所有三个字母长的代码,并且工作正常。但我想更改它以匹配除一个之外的所有代码。例如,假设我想排除“cct”。我尝试使用否定前瞻通过修改上面的匹配器来从路由中排除“cct”,如下所示:

app.get('/:code((?!cct)[a-zA-Z]{3})', codeHandler);
Run Code Online (Sandbox Code Playgroud)

但现在这条路线不匹配任何东西。即使以前捕获的有效代码现在也不匹配。我不知道我做错了什么。

Col*_*son 5

我认为最简单的方法是保持正则表达式不变,但在 codeHandler 函数内部有以下内容:

if(req.url == '/cct') return next();
Run Code Online (Sandbox Code Playgroud)

然后 Express 将继续执行下一个路线处理程序。如果您为“/cct”定义了一个,它将转到该地址 - 如果没有,则会导致 404 错误,因为找不到该页面。