【问题标题】:Checking for empty strings in Joi (hapi.js)在 Joi (hapi.js) 中检查空字符串
【发布时间】:2016-08-14 09:34:30
【问题描述】:

我正在使用 Hapi.js 框架和 Joi 进行数据验证。我正在尝试使用 Joi 验证 JSON 文件。我已经定义了一个架构,并想检查 JSON 文件是否包含我的架构中的所有字段。

某些字符串字段可以为空。在我的架构文件中,当我将min 定义为0 时,它说name 是必填字段。

我正在使用以下架构:

    module.exports = {
      "name": { "type": "string", "min": 0, "max": 30},
      "age": { "type": "number", "min": 1, "max": 36},
      "dob": { "type": "string", "min": 0, "max": 100 }
    }

如何修改此架构以处理空字符串?

【问题讨论】:

    标签: string validation joi


    【解决方案1】:

    如果您想允许空字符串,您需要使用joi.string().allow('') 明确允许它们。

    var joi = require('joi');
    
    var schema = joi.object().keys({
        name: joi.string().min(0).allow('').allow(null),
        age: joi.number().min(1).max(36),
        dob: joi.string().min(0).max(100)
    });
    
    var obj = {
        name: '',
        age: '18',
        dob: '11/11/2998'
    };
    
    var result = joi.validate(obj, schema);
    
    console.log(JSON.stringify(result, null, 2));
    

    上述架构使用joi.describe后的输出为:

    {
      "type": "object",
      "children": {
        "name": {
          "type": "string",
          "valids": [
            "",
            null
          ],
          "rules": [
            {
              "name": "min",
              "arg": 0
            }
          ]
        },
        "age": {
          "type": "number",
          "invalids": [
            null,
            null
          ],
          "rules": [
            {
              "name": "min",
              "arg": 1
            },
            {
              "name": "max",
              "arg": 36
            }
          ]
        },
        "dob": {
          "type": "string",
          "invalids": [
            ""
          ],
          "rules": [
            {
              "name": "min",
              "arg": 0
            },
            {
              "name": "max",
              "arg": 100
            }
          ]
        }
      }
    }
    

    【讨论】:

    • 感谢您的回复 Cuthbert.. 但我想从文件中读取模式.. 就像我的帖子中显示的那样。我使用了 module.exports 然后定义模式。有什么方法可以让 .allow 适合模式..
    • 希望它采用 JSON 格式的原因是什么?这看起来也不像joi.compile() 所需的语法。有什么理由不能像我在回答中给出的那样导出 joi 对象吗?
    猜你喜欢
    • 2020-07-30
    • 2017-05-15
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 2021-05-20
    • 2019-06-01
    • 2014-07-30
    • 1970-01-01
    相关资源
    最近更新 更多