Cannot read 属性 'posts' of null 代码中标记的错误

Cannot read property 'posts' of null error marked in the code

代码在 foundUser.posts.push(post)

行抛出错误
var userSchema=new mongoose.Schema({
    email:String,
    name:String,
    posts:[
        {
            type:mongoose.Schema.Types.ObjectId,
            ref:"post"
        }
    ]
});

User.findOne({name:"Karikey Sharma"},function(err,foundUser){
  if(err){
    
  }else{
    foundUser.posts.push(post); // this line shows error saying cannot read posts 
    foundUser.save(function(err,data){
      if(err){
        
      }else{
        console.log(data);
      }
    })
  }
});

您的查询似乎返回了 null,即您提供的查询 ({name:"Karikey Sharma"}) 未找到 User。 这意味着 foundUser 被设置为 null 并且尝试访问 foundUser.posts 意味着执行 null.posts,这将引发错误,因为 null 没有任何 属性 如 posts.

你可以试试这个,

User.findOne({name:"Karikey Sharma"},function(err,foundUser){
  if(err || foundUser === null){ // Check if there was an error, or no user was found
    
  }else{
    foundUser.posts.push(post);
    foundUser.save(function(err,data){

如果您正在使用 populate,您也需要有 Post 架构。

    var postSchema=new mongoose.Schema({ text:String,
    ....
    user:{ type:mongoose.Schema.Types.ObjectId, ref:"user" } });

当您尝试获取用户模式中的任何项目时,如果您也想获取帖子,则需要像这样使用 populate()。

User.findOne({name:"Karikey Sharma"}).populate('post').exec((err,user)=>{
if(err || !user){
 return;
}
else{
user.posts.push(post.id);
}
})