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

208
Vistas
Diferencia entre async(req,res,next) y async(req,res,()=>{}

Recientemente me encontré con este código y no entiendo por qué se ha omitido el next de la función de protect (dentro de la función de protección y protectandauth ) mientras que originalmente se incluyó en la función de protect . Quiero saber la diferencia entre protect=async(req,res,next) y protect=async(req,res,()=>{} .

También veo que aunque next se omite en la función protect (la que está dentro de protectandauth ), todavía se usa en el código después de la declaración 'if', ¿cómo es eso posible?

Código:

 export const protect = async (req, res, next) => { if ( req.headers.authorization && req.headers.authorization.startsWith("Bearer") ) { let token; token = req.headers.authorization.split(" ")[1]; const decoded = jwt.verify(token, "kris"); req.userId = decoded.id; try { req.user = await User.findById(req.userId).select("-password"); next(); } catch (error) { res.status(401).json(error.message); } if (!token) { res.status(404).json("no token found"); } } }; export const protectandauth = async (req, res, next) => { protect(req, res, () => { if (req.userId == req.params.id) { next(); } else { res.status(401).json("not authorised"); } }); };
about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Cada devolución de llamada en la que accede a req y res , también puede acceder a next . next es una función que se usa para decir "pasar a la próxima devolución de llamada", sabiendo que una solicitud puede ser procesada por múltiples devoluciones de llamada, así:

 const firstCallback= (req, res, next) => {} const secondCallback= (req, res, next) => {} app.get("/", firstCallback); app.get("/", secondCallback);
 // or using this syntax app.get("/", firstCallback, secondCallback);

En el ejemplo anterior, cuando llega una solicitud a / , firstCallback la maneja primero y es uno de los dos escenarios a continuación (de lo contrario, la solicitud se bloqueará y el usuario no obtendrá una respuesta):

  1. Detiene la solicitud llamando a uno de los métodos res , como res.status(401).json("not authorised");
  2. Dice "pasar a la próxima devolución de llamada" llamando a next() , y luego secondCallback lo maneja.

Si se omite next de los parámetros, llamará a next() donde no está undefined y eso genera un error. Hablando del uso de la función de protect , si observa, existe next como parte de los parámetros de protectandauth , y es ese next el que se usa dentro del tercer parámetro de protect , que es:

 () => { if (req.userId == req.params.id) { next(); } else { res.status(401).json("not authorised"); } }

Y en este código específico que tiene, la función anterior se pasa como next en la definición de protect .

about 4 years ago · Santiago Trujillo Denunciar

0

Usamos next si queremos pasar nuestra solicitud al siguiente middleware en línea. Tal vez en protect, el programador podría no querer pasar el requerimiento al siguiente middleware pero en protectandauth quiere pasar el req al siguiente middleware si esta condición resulta ser cierta

 if (req.userId == req.params.id) { next(); }
about 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