错误:路线。把()需要回呼功能,但有一个[对象不确定的]-这是什么错误?

0

的问题

我不知道为什么我不断收到这个错误:

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

我认为这是一个问题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) => {
    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;

我很抱歉,如果这一员额主要是代码,我只是不知道还能说什么因为我真的不知道问题是什么。 任何帮助,将不胜感激

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

最好的答案

0

如果你 console.log(verifyToken)verifyTokenAndAuthorization 你会得到 undefined

还有一个问题与你创造了 verifyTokenAndAuthorization 功能和你 module.exports. 的 module.exports 应该是外面的 verifyTokenverifyTokenAndAuthorization 功能不应该是内部嵌套的 verifyToken 功能。

2021-11-22 02:43:39

其他语言

此页面有其他语言版本

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