Nodejs-使用regex将多个参数添加到路由中

Nodejs - adding multiple parames to a route with regex

本文关键字:添加 路由 参数 使用 regex Nodejs-      更新时间:2023-09-26

因此,我正试图创建我的第一条路由,该路由使用regexs:过滤多个参数

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

它似乎不喜欢我的regex,但我尝试过使用regex测试仪,它看起来很好。它与nodejs和express的工作方式是否有我遗漏的地方?我希望能够获得像-100.00和-100这样的分数,但它似乎没有像预期的那样起作用。有什么想法吗?还有一种简单的方法可以将这些正则表达式从路由中分离出来,因为它们本质上是重复的。谢谢

编辑:我能够通过在regex下面添加rh和使用if语句进行测试来解决这个问题。但我仍然想知道,如果不使用单独的正则表达式,这是否可能

var pointRegex = new RegExp("^'-?[0-9]{1,3}('.[0-9]{1,9})?$");

不要在您的路由中使用这种regex,使用参数,然后在路由中使用这些,因此在这种情况下,您可以获得:

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)并让通用错误处理程序处理它。如果它们匹配,您将自动进入下一个中间件,以形成实际响应的函数结束。

  1. 看看快递包裹

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);
});

有关详细信息,请参阅Express4.x文档的app.param部分。