ExpressJS的路线正则expression式:如何将一个参数与一条路线以外的所有东西进行匹配
我有一个路由定义这样的code
参数:
app.get('/:code([a-zA-Z]{3})', codeHandler);
它匹配三个字母的所有代码,并且工作正常。 但我想改变它以匹配除一个之外的每个代码。 例如,可以说我想排除“cct”。 我试图使用负面的前瞻从路由通过修改上述匹配程序行使“cct”像这样:
app.get('/:code((?!cct)[a-zA-Z]{3})', codeHandler);
但现在这条路线不匹配任何东西。 即使以前被捕获的有效代码现在也不匹配。 我不知道我在做什么错。
我认为最简单的方法就是让你的正则expression式保持原样,但是在codeHandler函数里有一些东西:
if(req.url == '/cct') return next();
然后快递将移动到下一个路线处理程序。 如果你已经为'/ cct'定义了一个,那么它会去那个 – 如果没有,将会导致一个404错误,因为找不到这个页面。
尝试这个:
app.get(/^\/((?!cct)[a-zA-Z]{3})$/, (req,res) => { console.log(req.params[0]); })