发布请求时出错,ValidationError:TodoTask验证失败:user:值的强制转换为ObjectId失败



我在尝试将todo发布到数据库时出错。ValidationError:TodoTask验证失败:user:值转换为ObjectId失败

id: 62e02a03c5f6c427c8c3ed44,
user: {
_id: 62e02a03c5f6c427c8c3ed44,
name: 'abc',
email: 'someemail@example.com',
password: '$2a$10$C....',
admin: true,
date: 2022-07-26T17:53:07.645Z,
__v: 0
}
}"(type Object) at path "user"

我发布请求的功能:

const todoTask = await new TodoTask({
content: req.body.content,
user: {
id: req.user._id,
user: req.user,
},
});
try {
await todoTask.save(function (err, doc) {
if (err) throw err;
console.log("item saved!");
});
return res.redirect("/dashboard");
} catch (err) {
return res.redirect("/dashboard");
console.log(err);
}
};    

模式定义为:

content: {
type: String,
required: true,
},
date: {
type: Date,
default: Date.now,
},
user: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",    
},
});
module.exports = mongoose.model("TodoTask", todoTaskSchema);

由于user属性被定义为ref,您应该只将_id存储在其中:

const todoTask = await new TodoTask({
content: req.body.content,
user: req.user._id,
});
try {
await todoTask.save(function (err, doc) {
if (err) throw err;
console.log("item saved!");
});
return res.redirect("/dashboard");
} catch (err) {
return res.redirect("/dashboard");
console.log(err);
}
};   

当检索用户信息时,您只需要populateTodoTask,例如:

const totoTask = await TodoTask.populate('user').exec();

相关内容

最新更新