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() call
exception。
运用
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);
虽然这是在文件中说明,但不是很清楚。
希望这可以帮助。