Erreur: La Route.put() nécessite une fonction de rappel, mais il a obtenu un [objet Indéfini] - Quelle est cette erreur?

0

La question

Je n'ai aucune idée de pourquoi je reçois cette erreur:

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...

Je pensais que c'était un problème avec le node_modules fichier alors j'ai supprimé et ré-installé. Cela ne fonctionne pas. Voici mes autres fichiers susceptibles de contenir le problème

user.js: je pense que c'est ici, dans la user.js fichier, mais ill après les 2 autres associés avec est fichier, juste au cas où

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;

Je m'excuse si ce post est principalement le code, je ne sais pas quoi dire d'autre parce que honnêtement, je ne sais pas quel est le problème. Toute aide serait grandement appréciée

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

La meilleure réponse

0

Si vous console.log(verifyToken) ou verifyTokenAndAuthorization vous obtiendrez undefined

Il y a un problème avec la façon dont vous avez créé le verifyTokenAndAuthorization la fonction et votre module.exports. L' module.exports doit être à l'extérieur de la verifyToken et la verifyTokenAndAuthorization la fonction ne doit pas être imbriquées à l'intérieur des verifyToken fonction.

2021-11-22 02:43:39

Dans d'autres langues

Cette page est dans d'autres langues

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