网站搜索

node.js - NodeJs routing-controllers:我如何在中间件调用中添加动态参数


我已经按照以下教程操作:

  • https://github.com/typestack/routing-controllers#creating-your-own-express-middleware

但是我找不到在 @UseBefore/@UseAfter 中间件调用中注入动态参数的方法,像这样:

@Get("/something/:id")
@UseBefore(checkPermission(['canReadThis','canWriteThis']))
getOne(@Param("id") id: number) {
    // ...
}

有人能指导我做这个吗?

我找到了这个:

  • https://github.com/typestack/routing-controllers/issues/338#issuecomment-348169164

但是我不知道如何处理来自 Context “Class”和“{req, resp, next}”的数据,就像这样

function loggingMiddleware(request: any, response: any, next?: (err?: any) => any): any {
  console.log('do something...');
  next();
}

答案#1

终于发现

我的中间件:

@UseBefore((request: any, response: any, next: Function) =>
  PermissionsChecker(request, response, next)({
    permissions: ['ONE_PERMISSION', 'ANOTHER_ONE']
  })
)

我的处理器函数

export const PermissionsChecker = (request: any, response: any, next: Function) => 
  async ({ permissions }: { permissions: string[] }): Promise<any> => { 
     // ... do something 
}

答案#2

试试这个

function executeMiddlewareList (middlewareList, req, res, next) {
   async.eachSeries(middlewareList, function(middleware,callback) {
      middleware.bind(null,req,res,callback)()
   }, function(err) {
      if (err) return res.status(500).json({error: err});
      next();
   })
}