0

背景

我正在服务器上使用 Node/Express 4 编写一个 Web 应用程序。

我的一些路线需要向公众开放,但其他路线需要使用令牌身份验证来保护。执行令牌认证的过程基本上分解为以下 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实际上是一个函数,它为提供的路由权限返回一个自定义的中间件函数,但在其他方面并不特殊。

问题/问题

我觉得不得不一直把这些写出来是相当湿的。有没有办法创建一个捆绑包,例如authenticate,它本质上只是这些中间件的占位符?

这个的常见模式是什么?

可能的解决方案

我可以创建一个函数,该函数返回一个数组,其元素是中间件函数,然后自己将其展平,例如

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]));
);

但是,我想知道是否有更清洁或更标准化的方式来执行此操作。

4

1 回答 1

1

Express 支持中间件数组,因此可以使用:

router.post('/api/my-secure-endpoint',
  auth(['perm1', 'perm2']),
  [your, other, middlewares],
  ...
)

更多信息在这里

于 2016-08-14T19:38:35.273 回答