错误:Route.put()需要一个回调函数,但得到了一个[object Undefined]-这个错误是什么



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

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

我认为node_modules文件有问题,所以我删除并重新安装了它。这不起作用。这是我的其他文件,可能包含问题

user.js:我想它在user.js文件中,但我会发布与is文件相关的其他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;

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

如果您使用console.log(verifyToken)verifyTokenAndAuthorization,您将获得undefined

创建verifyTokenAndAuthorization函数和module.exports的方式存在问题。module.exports应该在verifyToken之外,而verifyTokenAndAuthorization函数不应该嵌套在verifyToken函数内部。

相关内容

最新更新