好天,我一直有问题,试图创建一个中间件,使用户编辑他的个人资料,只有当他是该个人资料的所有者或管理员,我希望如果我可以得到帮助,并显示我在哪里犯了我的错误,一种新的网络开发。
//the middleware created
middlewareObj.checkProfileOwnership= function(req,res,next){
if(req.isAuthenticated()){
User.findById(req.params.user_id, function(err, editProfile){
if(err){
req.flash("error", "error");
res.redirect("back");
}
else{
// does user own the info???
if(editProfile.contributor.id.equals(req.user._id) || req.user.isAdmin){
next();
} else{
req.flash("error","You need Permission to do that");
res.redirect("back");
}
}
});
}
else{
req.flash("error", "You need to be Logged in to do that");
res.redirect("back");
}
};
// the user model
var mongoose= require("mongoose");
var passportLocalMongoose= require("passport-local-mongoose");
var UserSchema= new mongoose.Schema({
username:String,
password:String,
avatar: String,
info:String,
firstName: String,
lastName: String,
email: String,
isAdmin: {type:Boolean, default:false},
contributor:{
id: {
type:mongoose.Schema.Types.ObjectId,
ref:"User"
},
username:String
}
但是,一旦我尝试执行它,就会产生以下错误。"TypeError:无法读取null的属性'contributor‘“
发布于 2018-12-20 03:39:56
当你调用User.findById
时,你的回调函数有err
和editProfile
。虽然您确实检查了一个错误,但这并不一定意味着您找到了将填充到editProfile
中的用户。您应该添加一个检查,以查看是否定义了editProfile
,如果没有,则根据您传入的id (req.query.user.id
...我还会检查以确保您正在搜索用户的id位于那里,而不是req.user._id
或类似的位置)。
https://stackoverflow.com/questions/53858071
复制相似问题