【发布时间】:2020-10-19 00:36:24
【问题描述】:
我正在尝试创建员工管理系统的克隆。 I want to implement a feature that when admin opens a details page for any project he will get list of available employees as checkboxes and when select them and submit then those employees will be added to the given project.
我正在使用 Node.js 和 MongoDB 开发它
我的项目架构是 -
const ProjectSchema = new mongoose.Schema({
name: String,
deadline: Date,
description: String,
manager:{
id: {
type: mongoose.Schema.Types.ObjectId,
ref: "User"
},
},
employees: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "User"
}
],
created_on: {
type: Date,
default: Date.now
}
});
表格-
<form action="/admin/project/<%= project._id %>/addmembers" method="POST">
<div class="row">
<% employees.forEach((employee) => { %>
<% if(!employee.projects.includes(project._id)){ %>
<div class="col-12 col-sm-6 col-md-4 col-xl-3">
<input type="checkbox" value="<%= employee._id %>" name="newMembers"> <%= employee.name %> </input>
</div>
<% } %>
<% }); %>
</div>
<hr class="my-2">
<p class="lead">
<button class="btn btn-blue btn-lg">Add Members</button>
</p>
</form>
处理请求的代码 -
router.post("/project/:id/addmembers", (req, res) => {
console.log("add member post route");
Project.findById(req.params.id, (err, foundProject) => {
if(err){
console.log(err);
req.flash("error", err.message);
res.redirect("back");
} else {
req.body.newMembers.forEach((employee) => {
foundProject.employees.push(employee);
})
foundProject.save()
console.log(foundProject);
req.flash("success", "Successfully added new members");
res.redirect("/admin/project/req.params.id");
}
})
});
现在,每当我提交表单时,都会添加用户,但我总是收到错误 Cast to ObjectId failed for value "req.params.id" at path "_id" for model "Project" 而不是 success message 现在我是 mongo 的新手,所以我用谷歌搜索它但无法解决我的问题,谁能解释我为什么会出现这个错误即将到来,我该如何解决?
我还知道,如果只选中一个复选框,那么 req.body.newMembers 将不是数组。如果您能提供更好的方法来做到这一点,那将非常有帮助?
更新 -
我也尝试了findOne()、find()、findByIdAndUpdate() 和id = mongoose.Types.ObjectId(req.params.id),但仍然收到相同的错误消息
【问题讨论】:
标签: node.js mongodb mongoose-schema