Express路由器参数validation

快速的4x API文件声称,您可以传递正则expression式作为第二个参数router.param为了validationrouter.param

现在可以使用该方法来有效地validation参数(并且可以parsing它们以提供捕获组)

然后提供以下示例。

 // validation rule for id: should be one or more digits router.param('id', /^\d+$/); router.get('/user/:id', function(req, res) { res.send('user ' + req.params.id); }); // validation rule for range: should start with one more alphanumeric characters, followed by two dots, and end with one more alphanumeric characters router.param('range', /^(\w+)\.\.(\w+)?$/); router.get('/range/:range', function(req, res) { var range = req.params.range; res.send('from ' + range[1] + ' to ' + range[2]); }); 

但是,这实际上并不奏效。 进一步深入了解,似乎expression式代码实际上并不支持文档声明的内容。 事实上,传递除函数之外的任何东西都会使你得到一个整洁的invalid param() callexception。

运用

expression4.12.3
节点0.12.4

所以我的问题是这个function是否真的存在,或者我做错了什么。 我试图完成在文档中提供的相同的东西,但我收到上面提到的错误。 任何指导将不胜感激:)

答案可以在这里find。

如果你使用express <= 4.11基本上下面的代码片段需要利用上面提到的router.param(fn)方法之前运行。

4.11

 router.param(function(name, fn) { if (fn instanceof RegExp) { return function(req, res, next, val) { var captures; if (captures = fn.exec(String(val))) { req.params[name] = captures; next(); } else { next('route'); } } } }); 

expression4.12

如果使用express >= 4.12 ,则无需使用router.param(fn)使用以下router.param(fn)完成相同操作。 实际上,上面的4.12例子会popup一个弃用警告。

 app.get('/user/:userId([0-9]+)', fn); 

虽然这是在文件中说明,但不是很清楚。
希望这可以帮助。