Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

207
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!