Error: La Ruta.put() requiere una función de devolución de llamada, pero tengo un [objeto Indefinido] - Lo que es este error?

0

Pregunta

No tengo idea de por qué me sale este error:

C:\Users\yurit\Desktop\EcommcereAPI\node_modules\express\lib\router\route.js:202
        throw new Error(msg);
        ^

Error: Route.put() requires a callback function but got a [object Undefined]
    at Route.<computed> [as put] (C:\Users\yurit\Desktop\EcommcereAPI\node_modules\express\lib\router\route.js:202:15)
    at Function.proto.<computed> [as put] (C:\Users\yurit\Desktop\EcommcereAPI\node_modules\express\lib\router\index.js:510:19)
    at Object.<anonymous> (C:\Users\yurit\Desktop\EcommcereAPI\routes\user.js:7:8)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:93:18)
    at Object.<anonymous> (C:\Users\yurit\Desktop\EcommcereAPI\index.js:5:19)
[nodemon] app crashed - waiting for file changes before starting...

Pensé que era un problema con el node_modules archivo, así que he borrado y re-instalado. Que no funciona. Aquí están mis otros archivos que puedan contener el problema

user.js: creo que es aquí, en el user.js archivo, pero la enfermedad post los otros 2 asociado con su archivo por si acaso

const { verifyToken, verifyTokenAndAuthorization } = require("./verifyToken");

const router = require("express").Router();

//UPDATE
router.put("/:id", verifyTokenAndAuthorization, async (req, res) => {
    if (req.body.password) {
      req.body.password = CryptoJS.AES.encrypt(
        req.body.password,
        process.env.PASS_SEC
      ).toString();
    }
  
    try {
      const updatedUser = await User.findByIdAndUpdate(
        req.params.id,

        {
          $set: req.body,
        },
        { new: true }
      );
      res.status(200).json(updatedUser);
    } catch (err) {
      res.status(500).json(err);
    }
  });


module.exports = router;

verifyToken.js:

const jwt = require("jsonwebtoken");

const verifyToken = (req, res, next) => {
    const authHeader = req.headers.token;
    if (authHeader){
        jwt.verify(token, process.env.JWT_SEC, (err,user) => {
            if(err) res.status(403).json("Token is not valid!");
            req.user = user;
            next();
        })
    } else {
      return res.status(401).json("You are not authenticated");
    }

    const verifyTokenAndAuthorization = (req, res, next) => {
      verifyToken(req, res, () => {
        if (req.user.id === req.params.id || req.user.isAdmin){
            next();
        } else {
          rez.status(403).json("You are not all to do that!");
        }
      })
    }

    module.exports = { verifyToken, verifyTokenAndAuthorization};
}

auth.js:

const router = require("express").Router();
const User = require("../models/User");
const CryptoJS = require("crypto-js");
const jwt = require("jsonwebtoken");

//REGISTER
router.post("/register", async (req,res) => {
    const newUser = new User({
      username: req.body.username,
      email: req.body.email,
      password: CryptoJS.AES.encrypt(req.body.password, process.env.PASS_SEC).toString(),
    });

    try {
      const savedUser = await newUser.save();
      res.status(201).json(savedUser);
    } catch (err) {
      res.status(500).json(err);
    }
});

//LOGIN

router.post("/login", async (req,res) => {
  try {
    const user = await User.findOne({ username: req.body.username});
    !user && res.status(401).json("Wrong credentials!")

    const hashedPassword = CryptoJS.AES.decrypt(
      user.password,
      process.env.PASS_SEC
    );
    const OriginalPassword = hashedPassword.toString(CryptoJS.enc.Utf8);

    OriginalPassword !== req.body.password && res.status(401).json("Wrong credentials");

    const accessToken = jwt.sign(
      {
        id: user._id,
        isAdmin: user.isAdmin,
      },
      process.env.JWT_SEC,
      {expiresIn: "3d"}
    );

    const { password, ...others} = user._doc;

    res.status(200).json({...others, accessToken});
  } catch (err) {
    res.status(500).json(err);
  }
});

module.exports = router;

Pido disculpas si este post es principalmente el código, simplemente no sé qué más decir porque sinceramente, no sé cuál es el problema. Cualquier ayuda sería muy apreciada

express javascript node.js router
2021-11-21 22:02:55
1

Mejor respuesta

0

Si console.log(verifyToken) o verifyTokenAndAuthorization usted recibirá undefined

Hay un problema con la forma en que se creó el verifyTokenAndAuthorization función y su module.exports. El module.exports debe estar fuera de la verifyToken y el verifyTokenAndAuthorization la función no debe estar anidada dentro de la verifyToken la función.

2021-11-22 02:43:39

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................