首页 > 解决方案 > 中间件实现不适用于某些路由

问题描述

在我的项目中,我有 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() 需要回调函数,但得到了 [object Undefined]

问题是什么以及如何解决

标签: node.jsexpressroutesbackendmiddleware

解决方案


你有一个错字:

您已输入:checkCampgroundOwenership

应该:checkCampgroundOwnership


推荐阅读