Добавление массива другой схемы / объекта в mongodb из _id, включая проверку Joi - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь создать внутренний сервис для потенциального портфеля, используя 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
  }
});

Это мой проект Schema.Проблема, я думаю, заключается в том, когда я пытаюсь проверить ввод с помощью 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);
});

Все зависимости требуются / импортируются, поэтому это не должно быть проблемой

...