В настоящее время я пытаюсь реализовать сборку rest api в nodeJS, mongoDB, express.Одно из полей принимает массив идентификаторов объектов (спринты полей в проекте модели).Вопрос в том, как выполнить правильную проверку в файле маршрута (projects.js) при выполнении метода post (имея в виду, что спринты полей не требуются)?
Я пытался проверить typeof req.body.sprints , а также длина , но безрезультатно.Я также пытался найти ответ на stackoverflow и т. Д., Но не нашел ничего подобного.
project.js (файл модели)
const mongoose = require("mongoose");
const Project = mongoose.model(
"Project",
new mongoose.Schema({
name: {
...
sprints: [
{
type: new mongoose.Schema({
name: {
type: String,
required: true,
minlength: 5,
maxlength: 255
},
isClosed: { type: Boolean, default: false }
})
}
]
})
);
function validateProject(project) {
const schema = {
name: Joi.string()
.min(5)
.max(255)
.required(),
createdBy: Joi.objectId().required(),
isClosed: Joi.boolean(),
sprints: Joi.array().items(Joi.objectId())
};
return Joi.validate(project, schema);
}
exports.Project = Project;
exports.validate = validateProject;
projects.js (файл маршрута)
const express = require("express");
const { User } = require("../models/user");
const { Sprint } = require("../models/sprint");
const { Project, validate } = require("../models/project");
const router = express.Router();
...
/* POST project */
router.post("/", async (req, res) => {
const { error } = validate(req.body);
if (error) return res.status(400).send(error.details[0].message);
const user = await User.findById(req.body.createdBy);
if (!user) return res.status(400).send("Invalid user");
const sprint = await Sprint.findById(req.body.sprints);
if (!sprint) return res.status(400).send("Invalid sprint");
//i think that here i have to validate if sprint has even one
element and only then do object id validation
const project = new Project({
name: req.body.name,
createDate: req.body.createDate,
createdBy: { _id: user._id, name: user.name },
isClosed: req.body.isClosed,
sprints: [
{
_id: sprint._id,
name: sprint.name,
isClosed: sprint.isClosed
}
]
});
await project.save();
res.send(project);
});
...
module.exports = router;
В моем методе записи я проверяю, существует ли данный идентификатор в таблице Sprints, но у меня проблема, если не указан идентификатор спринта (я получаю 'Invalidспринт 'сообщение).Ожидаемый результат будет: я могу предоставить массив спринтов, один спринт, или ни одного вообще.