【问题标题】:A regex works fine with Express Route Tester but it failed when it used with NodeJS正则表达式与 Express Route Tester 一起工作正常,但与 NodeJS 一起使用时失败
【发布时间】: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


【解决方案1】:

试试下面的代码

app.get(/^\/(dogs|pinguin|bear|wolf|cat|rat)/, function (req, res) {
    res.send('dogs or pinguin');
});

【讨论】:

    猜你喜欢
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 2016-12-29
    • 2011-06-19
    相关资源
    最近更新 更多