node.js - 中间件实现不适用于某些路由
问题描述
在我的项目中,我有 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]
问题是什么以及如何解决
解决方案
你有一个错字:
您已输入:checkCampgroundOwenership
应该:checkCampgroundOwnership
推荐阅读
- javascript - 如何在不刷新页面的情况下打开链接
- android - 反应原生加载图像并存储在设备中?
- python - Azure Function:如何使用本地调试模式和使用 Python 的 Azure Functions 将我的日志写入 Azure Application Insights?
- flutter - 如何在屏幕尺寸大时从appbar中删除抽屉图标并在屏幕尺寸较小时显示它 | 颤振网络
- python - 一个非常简单的基于 YOUTUBE-DL 的程序
- reactjs - 如何在 React.js 的 redoc 侧边栏中自定义和添加选项
- asp.net-core - IIS - .NET Core api 部署时未启动
- git - 如果测试被拒绝,则拒绝 Github Push
- ios - 使 HTML 内容适合 Web 视图
- java - 获取java中processBuilder中变量的值