Soy nuevo en Node JS. Estoy practicando para construir una aplicación MERN. Tengo dos funciones getUserById e isSignedIn . Estas dos funciones son middlewares.
router.param("userId",getUserById) const getUserById = (req,res,next,id)=>{ User.findById(id).exec((err,user)=>{ if(err){ return res.json({ error:"Unable to process request", status: false, }) } console.log(1234); if(!user){ return res.json({ error:"User doesn't exist", status: false }) } req.user=user; next() }) } const isSignedIn = (req,res,next)=>{ const token = req.headers.authorization.split(" ")[1] jwt.verify(token, process.env.SECRET_KEY, (err, decoded)=>{ if(err){ return res.json({ status: false, error: "Invalid Token" }) } console.log(123); req.auth=decoded next() }) }; router.post("/api/create/:userId",isSignedIn,(req,res)=>{ res.send("Success")}) Este es mi entendimiento. Si en la URL se encuentra el userId de usuario, se ejecutará getUserById y luego se iniciará sesión. En getUserById , si hubo un error o si el usuario no existe, se enviará una respuesta y la ejecución del código se detendrá allí. Pero en isSignedin si el token no es válido, envío una respuesta como Invalid Token y la ejecución del código debería detenerse allí. Pero el código después de if también se ejecuta, ¿por qué es así?
Intenta seguir el código
router.param("userId",getUserById) const getUserById = async (req,res,next,id)=>{ try { const user = await User.findById(id) if(!user){ return res.json({ error:"User doesn't exist", status: false }) } else { req.user=user; next() } } catch (err) { return res.json({ error:"Unable to process request", status: false, error: JSON.stringify(err), }) } } const isSignedIn = async (req,res,next)=>{ const token = req.headers.authorization.split(" ")[1] try { const decoded = await jwt.verify(token, process.env.SECRET_KEY) if (decoded) { req.auth=decoded next() } } catch (err) { if(err){ return res.json({ status: false, error: "Invalid Token" }) } } }; router.post("/api/create/:userId",isSignedIn,(req,res)=>{ res.send("Success")})