Node.js 如何在NodeJSRESTAPI中正确验证对象ID数组
我目前正在努力在nodeJS、mongoDB和express中实现restapi构建。其中一个字段接受对象ID数组(模型项目中的字段sprint)。问题是,在使用post方法时,如何在路由文件(projects.js)中进行适当的验证(请记住,不需要字段sprint) 我试着检查要求身体冲刺的类型,并在这方面做长度,但没有结果。我还试图找到stackoverflow等问题的答案,但并没有遇到类似的问题 project.js(模型文件) projects.js(路由文件) 在我的post方法中,我正在检查sprint表中是否存在给定的id,但如果没有提供sprint id,我就会遇到问题(我会收到“Invalid sprint”消息)。预期结果是:我可以提供一系列sprint,一个sprint,或者根本不提供任何sprint。试试这个Node.js 如何在NodeJSRESTAPI中正确验证对象ID数组,node.js,mongodb,rest,mongoose,joi,Node.js,Mongodb,Rest,Mongoose,Joi,我目前正在努力在nodeJS、mongoDB和express中实现restapi构建。其中一个字段接受对象ID数组(模型项目中的字段sprint)。问题是,在使用post方法时,如何在路由文件(projects.js)中进行适当的验证(请记住,不需要字段sprint) 我试着检查要求身体冲刺的类型,并在这方面做长度,但没有结果。我还试图找到stackoverflow等问题的答案,但并没有遇到类似的问题 project.js(模型文件) projects.js(路由文件) 在我的post方法中,我
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.object({
name: Joi.string(),
isClosed: Joi.boolean
})
)
})
};
return Joi.validate(project, schema);
}
谢谢,这应该有用。我只是让它保持原样,并在应用程序的前端部分处理它,但很高兴知道它是可以做到的。
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;
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.object({
name: Joi.string(),
isClosed: Joi.boolean
})
)
})
};
return Joi.validate(project, schema);
}