Nodejs-使用regex将多个参数添加到路由中
Nodejs - adding multiple parames to a route with regex
因此,我正试图创建我的第一条路由,该路由使用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)
并让通用错误处理程序处理它。如果它们匹配,您将自动进入下一个中间件,以形成实际响应的函数结束。
- 看看快递包裹
IMO.,它使处理/定义路由中的表达式变得更容易
app.param('uid', /^[0-9]+$/);
app.get('/user/:uid', function(req, res, next){
var uid = req.params.uid;
res.send('user ' + uid);
});
- 你的路线模式可能会被简化
你所做的事情可能有原因,但你应该能够将其构建为.
/circle/:radius/:x/:y
- 所以大家一起
它会有点像
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部分。
相关文章:
- 如何在 html 页面上动态添加路由到脚本 src
- 流星 - 添加带有熨斗的路由后无法提交用户.路由器到登录和注册表单
- Nodejs-使用regex将多个参数添加到路由中
- Ember教程-向router.js添加新的路由
- Ember添加了对转换调用上下文(路由/控制器)的检查
- 动态添加/注册AngularJS控制器,无需路由
- 为什么我的 AngularJS 应用程序在添加路由时不起作用
- Nodejs 快速路由:如果添加了“/”,则没有样式
- 路由不起作用 AngularJS,只是添加一个哈希
- Express :如何将中间件独占添加到路由器对象中的大型路由列表中
- 如何在运行时将路由或状态添加到 Ember.Router
- 主干:从视图类向路由器添加路由
- 用javascript中的iron路由器动态添加路由
- 运行时添加路由(ExpressJs)
- 向遗留网站添加路由
- 添加路由提供程序时出现未捕获对象错误
- 向Backbone.js路由器添加路由,包括404处理程序
- 如何在hapi 0.8.4中添加路由
- Extjs 5-如何在init上添加路由
- 以编程方式添加路由后,当访问任何路由时,angular 会在按下后退按钮时引发错误