【发布时间】:2022-01-27 21:41:20
【问题描述】:
我在 NodeJs 项目中使用 express,我希望能够使用这些路由请求我的服务器:
/dogs
/pinguin
/bear
/wolf
/cat
/rat
我为此使用正则表达式 (http://forbeslindesay.github.io/express-route-tester/): Express Route Tester
它与快速路由测试器一起正常工作,但当我尝试使用 NodeJS 时它失败了
我的代码:
var express = require('express');
var app = express()
app.get("\/(dogs|pinguin|bear|wolf|cat|rat)", function (req, res) {
res.send('dogs or pinguin');
});
错误:
return new RegExp(path, flags);
^
SyntaxError: Invalid regular expression: /^\/(?(?:([^\/]+?))|pinguin|bear|wolf|cat|rat)\/?$/: Invalid group
at new RegExp (<anonymous>)
at pathtoRegexp (C:\Users\Corentin\node_modules\path-to-regexp\index.js:128:10)
at new Layer (C:\Users\Corentin\node_modules\express\lib\router\layer.js:45:17)
at Function.route (C:\Users\Corentin\node_modules\express\lib\router\index.js:500:15)
at Function.app.<computed> [as get] (C:\Users\Corentin\node_modules\express\lib\application.js:481:30)
at Object.<anonymous> (C:\Users\Corentin\Documents\mesProjets\mdm\mdm-api\routes.js:36:5)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
【问题讨论】:
-
错误消息中的正则表达式与您在文本中提供的不同。它包含序列
(?,它是named 组的开始,但紧随其后的是(?:,而需要一个名称。也许您只是在(?:之后忘记了:以使其成为非捕获组。我投票关闭为错字。 -
你试过
get(/(dogs|pinguin|bear|wolf|cat|rat)/,吗? -
@Anatoly 我仍然遇到类似的错误 /(dogs|pinguin|bear|wolf|cat|rat)/ return new RegExp(path, flags); ^ SyntaxError: Invalid regular expression: /^\/(?(?:([^\/]+?))|pinguin|bear|wolf|cat|rat)\/?$/: Invalid group at new RegExp () 在 pathtoRegexp (C:\Users\Corentin\node_modules\path-to-regexp\index.js:128:10) ......
-
@trincot 不同,因为 express 可能会添加一些额外的信息。我也尝试使用这个 get("\/:(dogs|pinguin|bear|wolf|cat|rat)",它编译得很好,但我无法使用邮递员请求 localhost:8000/dogs:结果:无法获取 /dogs
标签: node.js regex express path-to-regexp