Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

522
Vistas
¿Por qué aparece el error 502 Bad Gateway en mi middleware async express.js?

Tengo una API de nodo que se implementa y ejecuta como una función Lambda dentro de AWS.

 // mthd export const validateHeaderBearerToken = (req, res) => { if (!req.headers.authorization || req.headers.authorization.split(' ').length !== 2 || req.headers.authorization.split(' ')[0].trim() !== authConstants.BEARER_HEADER) { res.status(403) .send({ message: 'Invalid token' }); throw new AuthenticationException(authConstants.NO_VALID_TOKEN_IN_HEADER_ERROR); } return req.headers.authorization.split(' ')[1].trim(); };

y el controlador

 // controller searchApiV1Controller.use('/search/', checkAuthentication, searchRouter);

el servicio principal

 // mainService export const checkAuthentication = async (req, res, next) => { const bearerToken = req.headers.authorization; logger.info(`[${getCorrelationId(req)}] Authenticating the request`); const token = validateHeaderBearerToken(bearerToken, res); let application='liberty'; await checkAuthorize(application); ... }

Cuando paso el token de portador vacío dentro del encabezado, debería responder el mensaje "Token no válido" con el código de estado 403. Pero dado que el servicio principal (middleware) es un método asíncrono, la llamada responde con el error 502 Bad Gateway debido a AuthenticationException. Si eliminamos esta excepción, responderá correctamente con 403. Pero el método de servicio principal se ejecutará de forma asincrónica a través de los otros métodos de subutilidad dentro del método checkAuthentication. Así que no podemos eliminarlo. ¿Cuál puede ser la solución para esto?

FYI: No tengo ningún problema mientras ejecuto localmente.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Cuando se usan cadenas de middleware en Express, normalmente es mejor usar la función next() que lanzar excepciones/errores. Los hace más componibles y también sigue el principio de no usar excepciones para controlar el flujo. Las excepciones son para circunstancias verdaderamente excepcionales, no para sus operaciones estándar.

Si pasa un valor a next() asumirá que es un error y saltará directamente a su middleware de manejo de errores. También puede agregar valores a res.locals para pasarlo a través de cadenas de middleware.

Por ejemplo:

 export const validateHeaderBearerToken = (req, res, next) => { if (/* checks */) { return next(AuthenticationException(authConstants.NO_VALID_TOKEN_IN_HEADER_ERROR)); } res.locals.token = req.headers.authorization.split(' ')[1].trim(); };

Ahora, debido a que está configurando res.locals, no necesita llamar a su función de validación en checkAuthentication , puede usarla como middleware, convirtiendo esa función en algo como:

 export const checkAuthentication = async (req, res, next) => { // Assume res.locals.token exists, otherwise we'll have early-exited the entire request. const bearerToken = res.locals.token let application='liberty'; let result = await checkAuthorize(application); // Example logic... if (result.is_authorised == false) { return next(/*error*/) } }

Ahora nunca llamará a checkAuthentication si validateHeaderBearerToken no puede encontrar un token. La configuración de su enrutador se verá así:

 searchApiV1Controller.use('/search/', validateHeaderBearerToken, checkAuthentication, searchRouter);

Lectura adicional sobre el manejo de errores en express: http://expressjs.com/en/guide/error-handling.html

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda