捆绑中间件
Bundling Middleware
背景
我正在服务器上使用 Node/Express 4 编写 Web 应用程序。
我的一些路由需要向 public 开放,但其他路由需要使用令牌身份验证来保护。执行令牌认证的过程本质上分解为以下4个中间件:
router.post('/api/my-secure-endpoint',
check_token_integrity,
check_token_expiry,
check_route_permissions(['perm1', 'perm2',...]),
refresh_token_if_necessary,
...
);
check_route_permissions
实际上是 returns 为提供的路由权限定制的中间件函数的函数,但除此之外没有任何特殊之处。
问题/问题
我觉得一直把这些写出来是很WET的。有没有办法创建一个包,例如authenticate
这实际上只是这些中间件的占位符?
这个的常见模式是什么?
可能的解决方案
我可以创建一个函数,returns 一个数组,其元素是中间件函数,然后自己将其展平,例如
function auth(perms) {
return [
check_token_integrity,
check_token_expiry,
check_route_permissions(perms),
refresh_token_if_necessary,
];
}
router.post.apply(this,
_.concat('/api/my-secure-endpoint', auth(['perm1', 'perm2']), [my, other, middlewares]));
);
但是,我想知道是否有更简洁或更标准化的方法来执行此操作。
Express 支持中间件数组,所以这行得通:
router.post('/api/my-secure-endpoint',
auth(['perm1', 'perm2']),
[your, other, middlewares],
...
)
更多信息here。
背景
我正在服务器上使用 Node/Express 4 编写 Web 应用程序。
我的一些路由需要向 public 开放,但其他路由需要使用令牌身份验证来保护。执行令牌认证的过程本质上分解为以下4个中间件:
router.post('/api/my-secure-endpoint',
check_token_integrity,
check_token_expiry,
check_route_permissions(['perm1', 'perm2',...]),
refresh_token_if_necessary,
...
);
check_route_permissions
实际上是 returns 为提供的路由权限定制的中间件函数的函数,但除此之外没有任何特殊之处。
问题/问题
我觉得一直把这些写出来是很WET的。有没有办法创建一个包,例如authenticate
这实际上只是这些中间件的占位符?
这个的常见模式是什么?
可能的解决方案
我可以创建一个函数,returns 一个数组,其元素是中间件函数,然后自己将其展平,例如
function auth(perms) {
return [
check_token_integrity,
check_token_expiry,
check_route_permissions(perms),
refresh_token_if_necessary,
];
}
router.post.apply(this,
_.concat('/api/my-secure-endpoint', auth(['perm1', 'perm2']), [my, other, middlewares]));
);
但是,我想知道是否有更简洁或更标准化的方法来执行此操作。
Express 支持中间件数组,所以这行得通:
router.post('/api/my-secure-endpoint',
auth(['perm1', 'perm2']),
[your, other, middlewares],
...
)
更多信息here。