【问题标题】:JOI :allow null values in arrayJOI:允许数组中的空值
【发布时间】:2017-05-19 02:58:08
【问题描述】:

我正在尝试在 POST 请求中为数组添加验证

Joi.array().items(Joi.string()).single().optional()

我需要在有效负载中允许空值。你能告诉我这是怎么做到的吗?

【问题讨论】:

  • 你可以使用 any.allow(null) 方法吗?这是文档github.com/hapijs/joi/blob/v10.1.0/API.md#anyallowvalue
  • 我尝试了 any 和 allow(null),没有成功。
  • 你是在数组中允许空值还是空值而不是数组?
  • 只是不传递任何东西,null而不是数组。

标签: javascript node.js hapijs joi


【解决方案1】:

如果要允许数组为空,请使用:

Joi.array().items(Joi.string()).allow(null);

如果您想在数组中允许空字符串或空白字符串,请使用:

Joi.array().items(Joi.string().allow(null).allow(''));

例子:

const Joi = require('joi');

var schema = Joi.array().items(Joi.string()).allow(null);

var arr = null;

var result = Joi.validate(arr, schema); 

console.log(result); // {error: null}

arr = ['1', '2'];

result = Joi.validate(arr, schema);

console.log(result); // {error: null}


var insideSchema = Joi.array().items(Joi.string().allow(null).allow(''));

var insideResult = Joi.validate(['1', null, '2'], insideSchema);

console.log(insideResult);

【讨论】:

  • 谢谢 :),这是完美的
  • 我很抱歉这不是完美的主题,但我已经搜索了一段时间没有一个例子,这是非常接近的。我有一个值数组,但是当我只传递一个值时,我得到一个错误"query.fields must be an array",所以 Joi 在验证之前没有将单个项目转换为数组。如果我通过两个或更多,它通过验证。所以我似乎无法得到一个包含一个值的数组:fields: Joi.array().items(Joi.string().valid("val1", "valu2")) 有什么想法吗?
【解决方案2】:

我知道我发布的不是你要找的, 但是因为我遇到了类似的问题。

所以我的问题是:我不想在我的对象中允许空数组

我的解决方案:

// if you have array of numbers

key: joi.array().items(joi.number().required()).strict().required()

// if you have array of strings

key: joi.array().items(joi.string().required()).strict().required()

【讨论】:

    【解决方案3】:

    非常简短的回答是:

    name: Joi.string().allow(null)
    

    【讨论】:

      猜你喜欢
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 2019-06-01
      • 2021-07-06
      • 1970-01-01
      • 2018-08-07
      • 2017-07-11
      相关资源
      最近更新 更多