Node Js - 使用正则表达式向路由添加多个参数

Nodejs - adding multiple parames to a route with regex

所以我正在尝试创建我的第一条路线,该路线采用使用正则表达式过滤的多个参数:

router.get('/circle/:radius([0-9]{1,3})/Xposition/:x(\-?[0-9]{1,3}(\.[0-9]{1,9})?)/Yposition/:y(\-?[0-9]{1,3})', function(req, res, next) {
console.log('x ' + req.params.x);
console.log('y ' + req.params.y);
});

在做了这样的事情之后: http://localhost:8080/circle/100/x/100.0/y/100.00

我最终打印了以下内容:

 x 100.0
 y .0

它似乎不喜欢我的正则表达式,但我试过使用正则表达式测试器,它看起来不错。它与 nodejs 和 express 的工作方式有什么我遗漏的吗?我希望能够取 -100.00 和 -100 之类的点,但它似乎没有按预期工作。有任何想法吗?还有什么是将这些正则表达式从路由中分离出来的简单方法,因为它们基本上是重复的。谢谢

编辑: 我能够通过在正则表达式下方添加 rh 和带有 if 语句的 tesitng 来解决这个问题。但仍然想知道如果不使用单独的 regex

是否可行
var pointRegex = new RegExp("^\-?[0-9]{1,3}(\.[0-9]{1,9})?$");
  1. 查看express-params包。

它使你的路线中的 handling/defining 表达式更容易,IMO。

app.param('uid', /^[0-9]+$/);

app.get('/user/:uid', function(req, res, next){
  var uid = req.params.uid;
  res.send('user ' + uid);
});
  1. 您的路线模式可能会得到简化。

您的行为可能有原因,但您应该能够将其构造为。

/circle/:radius/:x/:y
  1. 所以一起

会是这样的

app.param('x', pointRegex);
app.param('y', pointRegex);
app.param('radius', pointRegex);

router.get('/circle/:radius/:x/:y', function(req, res, next) {
   console.log('x ' + req.params.x);
   console.log('y ' + req.params.y);
   console.log('radius ' + req.params.radius);
});

更多信息,look at the app.param section of the Express 4.x docs.

不要在你的路线中使用这种正则表达式,使用 parameters 然后在你的路线中使用 those,这样在这种情况下你会得到:

app.get("/circle/:r/:x/:y", function(req, res) {
  var r = req.params.r,
      x = req.params.x,
      y = req.params.y,
  res.json({......});
});

具有三个参数处理程序:

app.param("r", function(req, res, next, r) {
  if(r does not validate) next(new Error("bad radius"));
  req.params.r = r;
});

app.param("x", function(req, res, next, x) {
  if(x does not validate) next(new Error("bad x coordinate"));
  req.params.x = x;
});

app.param("y", function(req, res, next, y) {
  if(y does not validate) next(new Error("bad y coordinate"));
  req.params.y = y;
});

因此您在参数处理程序中处理验证。他们不符合他们需要的吗?调用 next(err) 并让通用错误处理程序处理它。如果它们确实匹配,您会自动进入下一个中间件,以形成实际响应的函数结束。