Saltar al contenido

Excluir ruta del middleware express

Hola usuario de nuestra página web, tenemos la respuesta a tu interrogante, has scroll y la encontrarás aquí.

Solución:

Aunque no hay un sistema de filtro de middleware integrado en expressjs, puede lograrlo al menos de dos maneras.

El primer método es montar todos los middlewares que desea omitir en una ruta de expresión regular que incluye una búsqueda negativa:

// Skip all middleware except rateLimiter and proxy when route is /example_route
app.use(//((?!example_route).)*/, app_lookup);
app.use(//((?!example_route).)*/, timestamp_validator);
app.use(//((?!example_route).)*/, request_body);
app.use(//((?!example_route).)*/, checksum_validator);
app.use(rateLimiter);
app.use(//((?!example_route).)*/, whitelist);
app.use(proxy);

El segundo método, probablemente más legible y limpio, es envolver su middleware con una pequeña función de ayuda:

var unless = function(path, middleware) 
    return function(req, res, next) 
        if (path === req.path) 
            return next();
         else 
            return middleware(req, res, next);
        
    ;
;

app.use(unless('/example_route', app_lookup));
app.use(unless('/example_route', timestamp_validator));
app.use(unless('/example_route', request_body));
app.use(unless('/example_route', checksum_validator));
app.use(rateLimiter);
app.use(unless('/example_route', whitelist));
app.use(proxy);

Si necesita una coincidencia de ruta más potente que la simple path === req.path puede usar el módulo path-to-regexp que Express usa internamente.

ACTUALIZAR: – En express 4.17req.path devuelve solo ‘/’, así que use req.baseUrl :

var unless = function(path, middleware) 
    return function(req, res, next) 
        if (path === req.baseUrl) 
            return next();
         else 
            return middleware(req, res, next);
        
    ;
;

Basado en la respuesta de @lukaszfiszer, ya que quería que se excluyera más de una ruta. Puedes agregar tantos como quieras aquí.

var unless = function(middleware, ...paths) 
  return function(req, res, next) 
    const pathCheck = paths.some(path => path === req.path);
    pathCheck ? next() : middleware(req, res, next);
  ;
;

app.use(unless(redirectPage, "/user/login", "/user/register"));

No se puede agregar como comentario lo siento.

También puede omitir una ruta como esta poniendo una condición en req.originalUrl:

app.use(function (req, res, next) {

    if (req.originalUrl === '/api/login') 
    return next();
     else 
         //DO SOMETHING
    

Tienes la opción de estimular nuestro cometido poniendo un comentario y puntuándolo te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *