Nodejs – 使用正则expression式为路线添加多个参数

所以我试图创build我的第一个路线,这需要使用正则expression式筛选多个参数:

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 

它似乎不喜欢我的正则expression式,但我已经尝试使用正则expression式testing仪,它似乎很好。 有什么我错过了如何与nodejs和expression? 我希望能够像-100.00和-100那样得分,但似乎并不像预期的那样工作。 有任何想法吗? 也是一个简单的方法来分裂这些正则expression式,因为他们essentailly重复。 谢谢。

编辑:我能够解决这个问题,通过在正则expression式下面添加rh和用if语句来添加tesitng。 但是,如果不使用单独的正则expression式,还是想知道这是否可能

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

不要在你的路由中使用这种正则expression式,使用参数然后在你的路由中使用这些正则expression式,以便在这种情况下你得到:

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

所以你在你的param处理程序中处理validation。 他们不符合他们的要求吗? next(err)调用next(err)并让通用error handling程序来处理它。 如果它们匹配,则会自动落入下一个中间件,最后形成实际响应的函数。

  1. 看一下express-params包。

它使处理/定义expression式更容易,国际海事组织。

 app.param('uid', /^[0-9]+$/); app.get('/user/:uid', function(req, res, next){ var uid = req.params.uid; res.send('user ' + uid); }); 
  1. 你的路线模式可能可以简化。

你可能有一个你做了什么的理由,但你应该能够构build它。

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

有关更多信息, 请参阅Express 4.x文档的app.param部分。