Express 4x api 文档声称您可以将正则表达式作为第二个参数传递给router.param http://expressjs.com/4x/api.html#router.param为了验证参数。
该方法现在可用于有效验证参数(以及
可选择解析它们以提供捕获组)
然后提供以下示例。
// 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]);
});
但是,这实际上似乎不起作用。更深入地研究,看起来并不像是快递代码 https://github.com/strongloop/express/blob/4.x/lib/router/index.js#L84-L114实际上支持文档的主张。事实上,传递函数以外的任何东西都会让你变得整洁invalid param() call
例外。
Using
express 4.12.3
node 0.12.4
所以我的问题是这个功能是否真的存在或者我是否做错了什么。我正在尝试完成文档中提供的相同操作,但收到上述错误。任何指导将不胜感激:)
答案可以找到here https://github.com/strongloop/expressjs.com/issues/388.
本质上需要运行以下代码片段prior来利用router.param(fn)
如果您使用的是快递,请按照上述方法<= 4.11
.
express 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');
}
}
}
});
express 4.12
如果您使用快递>= 4.12
你也可以完成同样的任务without的需要router.param(fn)
使用以下内容。事实上,上面的 4.12 之前的示例会弹出弃用警告。
app.get('/user/:userId([0-9]+)', fn);
虽然文档中有说明,但还不太清楚。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)