Estoy usando una biblioteca llamada Grant en mi aplicación. Anteriormente, lo incluí siguiendo los ejemplos en el archivo Léame vinculado anteriormente, sin embargo, ahora tengo la necesidad de incluirlo condicionalmente y parece que no puedo hacerlo funcionar.
Cómo funcionaba antes
const grant = new Grant(grantConfig); app.use(grant);
He hecho middleware condicional en Express antes, así que pensé que incluir a Grant no sería un problema.
Cómo lo intenté (no funciona)
const grant = new Grant(grantConfig); app.use((req, res, next) => { if (someBooleanVariable) { next(); } else { grant(req, res, next); } });
Así que esto no funciona. Creo que puede tener algo que ver con que Grant sea una instancia de Express frente a una función de middleware normal, pero no estoy seguro. Puede ver cómo se implementa Grant aquí . Los documentos de Express dicen que debe tratarse de la misma manera, pero también podría estar malinterpretándolos.
Nota: necesito que esto funcione por solicitud, de ahí el enfoque de estilo de middleware.
Si desea usar un middleware en particular solo en un subconjunto de rutas:
// On a single route: app.get('/some/route', grant, function(req, res) { ... }); // On a set of routes with a particular prefix: app.use('/api', grant, apiRouter); // On a specific router: let apiRouter = express.Router(); apiRouter.use(grant); apiRouter.get(...);