如何验证变量实际上是joi模式?

时间:2019-01-28 21:19:40

标签: javascript node.js joi

我正在尝试创建一个可重用的函数,您可以在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()
  }
}

2 个答案:

答案 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