我正在尝试创建一个可重用的函数,您可以在joi模式中传递该函数并针对req.body
运行验证。我想验证变量schema
,以确保它是有效的joi模式。
有没有办法做到这一点?
function validatePayload(schema) {
return (req, res, next) => {
const valid = joi.validate(req.body, schema)
if (valid.error) {
return handleErr(res, HttpStatus.BAD_REQUEST, valid.error.details[0].message)
}
return next()
}
}
答案 0 :(得分:3)
通过检查是否在架构原型链中找到Joi构造函数来显示Joi internally validates a schema,因此,您可能可以使用相同的验证:
const mySchema = Joi.object().keys({
username: Joi.string(),
password: Joi.string()
});
const isValidSchema = mySchema instanceof Joi.constructor;
console.log(isValidSchema);
<script src="https://cdn.jsdelivr.net/npm/joi-browser@13.4.0/dist/joi-browser.min.js"></script>
答案 1 :(得分:2)
现在有一种专用方法来检查提供的对象是否为模式
const Joi = require('@hapi/joi')
const schema = Joi.any();
Joi.isSchema(schema); // true
const notSchema = {}
Joi.isSchema(notSchema); // false
https://hapi.dev/module/joi/api/?v=17.1.1#isschemaschema-options