我正在尝试使用node.js为潜在的产品组合构建后端服务,以处理页面上发布的项目。我希望应用程序有一个单独的模型来存储类别,而我的项目架构要包含一个类别数组。这是用于发布端点的。
const projectSchema = new mongoose.Schema({
title: {
type: String,
required: true,
minlength: 2,
maxlength: 50
},
collaborators: {
type: [String],
defualt: []
},
categories: {
type: [categorySchema]
},
lastUpdated: {
type: Date,
default: Date.now
}
});
这是我的projectSchema。我认为的问题是当我尝试使用Joi验证输入时。 “如果我仅使用一个类别而不是类别数组,则该应用程序可以工作...
function validateProject(project) { const schema = {
title: Joi.string()
.min(2)
.max(50)
.required(),
collaborators: Joi.array().items(Joi.string()),
categoryIds: Joi.array().items(Joi.objectId())
};
return Joi.validate(project, schema);
}
这样无法验证objectId的数组吗?
我希望能够发布这样的项目:
{
"title":"Test1",
"collaborators": [
"Name1",
"Name2",
"Name3"
],
"categoryIds": [
"5b7fa72a393c3c14f04066c6",
"5b7fa76a7a714121b40f2266"
]
}
字符串数组可以工作,但是由于某种原因,当我尝试使用objectIds数组时,它只是挂起了,而且我看不到任何直接的错误...
我的帖子端点看起来像这样:
router.post("/", [auth, admin], async (req, res) => {
const { error } = validate(req.body);
if (error) res.status(400).send(error.details[0].message);
const categories = Category.find({
_id: { $in: req.body.categoryIds }
});
if (!categories)
res.status(400).send("Category with the given id was not found.");
let project = new Project({
title: req.body.title,
collaborators: req.body.collaborators,
categories
});
project = await project.save();
res.send(project);
});
所有依赖项都是必需的/已导入,因此这应该不是问题