【问题标题】:How to validate variable is actually a joi schema?如何验证变量实际上是一个 joi 模式?
【发布时间】:2019-06-21 22:54:17
【问题描述】:

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

【问题讨论】:

    标签: javascript node.js joi


    【解决方案1】:

    看来,Joi 在内部通过检查是否在模式原型链中找到 Joi 构造函数来验证模式,因此,您可能可以使用相同的验证:

    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>

    【讨论】:

      【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-04
        • 1970-01-01
        • 2020-05-26
        • 2022-11-14
        • 2020-05-08
        相关资源
        最近更新 更多