node.js - NodeJs routing-controllers: Πώς μπορώ να έχω δυναμική παράμετρο στην κλήση middleware


Έχω ακολουθήσει το σεμινάριο από:

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

Αλλά δεν βρίσκω τρόπο να εισάγω δυναμικές παραμέτρους στην κλήση 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();
   })
}