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