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);
}
})
代码在 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);
}
})