中间件实现不适用于某些路由



在我的项目中,我有 2 个不同的函数作为中间件,它们位于单独目录中的单独文件中,并且我已经将它们导入到我的路由文件中。 但是,其中一个函数正确执行,而另一个函数抛出并出错

第一个中间件函数(运行正常(是:-

isLoggedIn : function(req,res,next){
if(req.isAuthenticated()){
return next();
}
res.redirect("/login");
},

另一个功能(不起作用(是:-

checkCampgroundOwnership : function(req,res,next){
if(req.isAuthenticated()){
Campground.findById(req.params.id, function(err,foundCamp){
if(err){
res.redirect("back");
}
else{
if(foundCamp.author.id.equals(req.user._id)){
return next();
}
else{
res.redirect("back");
}
}
})
}
else{
res.redirect("back");
}
}

我正在我的路线中实现它们,如下所示:-

router.post("/", middleware.isLoggedIn, function(req,res){
req.body.description = req.sanitize(req.body.description);
Campground.create(req.body.camp, function(err,created){
if(err){
console.log(err);
}
else{
created.author.id = req.user.id;
created.author.username = req.user.username;
created.save();
res.redirect("/campgrounds");
}
})
})
router.put("/:id", middleware.checkCampgroundOwenership, function(req,res){
Campground.findByIdAndUpdate(req.params.id, req.body.camp, function(err,result){
if(err){
console.log(err)
}
else{
res.redirect("/campgrounds/"+ req.params.id);
}
})
})

生成的错误如下:-

错误:Route.get(( 需要一个回调函数,但得到了一个 [对象 未定义]

问题是什么以及如何解决

您有一个拼写错误:

您键入了:checkCampgroundOwenership

应该是:checkCampgroundOwnership

您必须按如下方式声明您的isLoggedIncheckCampgroundOwnership

exports.isLoggedIn = (req, res, next) => {
//your code...
};

因此,您可以在路由文件中导入。

最新更新