Nemám tušení, proč jsem stále tuto chybu:
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...
Myslel jsem, že to byl problém s node_modules soubor tak jsem smazal a znovu nainstaloval. Nefungovalo to. Zde jsou moje další soubory, které mohou obsahovat problém
user.js: myslím, že je to tady v user.js souboru, ale nemocný po dalších 2 asociovaný s je soubor jen zapouzdřit
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;
Omlouvám se, pokud tento příspěvek je většinou kód, já prostě nevím, co jiného říct, protože upřímně nevím, v čem je problém. Jakýkoliv pomoci chtěl bych být celek ocenil