Ошибка: Route.put() требует функции обратного вызова, но получил [объект не определен] — Что это за ошибка?

#javascript #node.js #express #routes #router

Вопрос:

Я понятия не имею, почему я продолжаю получать эту ошибку:

 C:UsersyuritDesktopEcommcereAPInode_modulesexpresslibrouterroute.js:202  throw new Error(msg);  ^  Error: Route.put() requires a callback function but got a [object Undefined]  at Route.lt;computedgt; [as put] (C:UsersyuritDesktopEcommcereAPInode_modulesexpresslibrouterroute.js:202:15)  at Function.proto.lt;computedgt; [as put] (C:UsersyuritDesktopEcommcereAPInode_modulesexpresslibrouterindex.js:510:19)  at Object.lt;anonymousgt; (C:UsersyuritDesktopEcommcereAPIroutesuser.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.lt;anonymousgt; (C:UsersyuritDesktopEcommcereAPIindex.js:5:19) [nodemon] app crashed - waiting for file changes before starting...  

Я подумал, что это проблема с файлом node_modules, поэтому я удалил и переустановил его. Это не сработало. Вот другие мои файлы, которые могут содержать проблему

user.js: Я думаю, что это здесь, в user.js файл, но я опубликую другие 2, связанные с этим файлом, просто в случае

 const { verifyToken, verifyTokenAndAuthorization } = require("./verifyToken");  const router = require("express").Router();  //UPDATE router.put("/:id", verifyTokenAndAuthorization, async (req, res) =gt; {  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) =gt; {  const authHeader = req.headers.token;  if (authHeader){  jwt.verify(token, process.env.JWT_SEC, (err,user) =gt; {  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) =gt; {  verifyToken(req, res, () =gt; {  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) =gt; {  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) =gt; {  try {  const user = await User.findOne({ username: req.body.username});  !user amp;amp; 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 amp;amp; 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;  

Я приношу извинения, если этот пост в основном является кодом, я просто не знаю, что еще сказать, потому что я, честно говоря, не знаю, в чем проблема. Любая помощь будет очень признательна

Ответ №1:

Если вы console.log(verifyToken) или verifyTokenAndAuthorization вы получите undefined

Есть проблема с тем, как вы создали verifyTokenAndAuthorization функцию и ваши module.exports . Функция module.exports должна быть вне verifyToken функции, и verifyTokenAndAuthorization функция не должна быть вложена внутри verifyToken функции.