从_id将另一个模式/对象数组添加到mongodb中,包括Joi验证

时间:2018-08-24 10:12:45

标签: node.js mongodb express mongoose joi

我正在尝试使用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);
});

所有依赖项都是必需的/已导入,因此这应该不是问题

0 个答案:

没有答案