You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express中对非/api/login、/api/signup路由认证时正则报错问题

解决Express中JWT认证路由的正则语法错误

你遇到的这个错误是因为路由正则的写法不符合Express的解析规则,导致生成了无效的正则表达式。

问题根源

你把正则表达式写成了字符串形式(用引号包裹):

app.use('/^\/api\/(?!signup|login).*$/', passport.authenticate('jwt', { session: false }));

Express对路径字符串有自己的处理逻辑:它会把这个字符串转换成内部的正则表达式,你写的^、$和转义的/会被当成普通字符,再加上Express自动追加的匹配规则,最终生成了像/^\/^\/api\/(?:?!signup|login)\.(.*)$\/?(?=\/|$)/这样的无效正则——里面重复的^锚点就是触发“Nothing to repeat”错误的核心原因。

正确的写法

直接传递正则字面量(去掉引号,用/.../直接包裹正则规则):

app.use(/^\/api\/(?!signup|login).*$/, passport.authenticate('jwt', { session: false }));

这样Express会直接使用你定义的正则,不会额外添加多余的匹配规则,就能精准匹配所有/api/开头、但排除/api/login和/api/signup的路由。

快速验证

可以简单确认这个正则的匹配范围:

  • 会匹配的路由:/api/profile、/api/posts/456
  • 不会匹配的路由:/api/login、/api/signup、/static/index.html

内容的提问来源于stack exchange,提问作者nipek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:35:45