【问题标题】:Treat `null` as `undefined` in Joi validation在 Joi 验证中将 `null` 视为 `undefined`
【发布时间】:2016-06-24 22:14:10
【问题描述】:

使用 Joi 验证和调节可选变量:

optional = Joi.attempt(optional, Joi.array().optional().default([]));

undefined替换为null对于可选参数来说很常见且方便,它应该将null视为undefined并回退到默认值。

如何实现?

【问题讨论】:

  • 那么问题是如果你通过null,它不会回退到[],而是将null设置为值?
  • @JoshBeam 是的。而且我真的希望使用 Joi 的方式可能比Joi.attempt(optional === null ? undefined : optional, ...) 更丑。

标签: javascript validation joi


【解决方案1】:

也纠结了一段时间,今天终于找到了解决办法。您必须使用empty(null) 才能达到预期的效果:

import * as joi from "joi";

const testSchema = joi.array().items(joi.string()).empty(null).allow(null).default([]);

const data1 = undefined;
const data2 = null;
const data3 = [];

const res1 = joi.validate(data1, testSchema);
const res2 = joi.validate(data2, testSchema);
const res3 = joi.validate(data3, testSchema);


console.log("res1", res1.value, res1.error);
console.log("res2", res2.value, res2.error);
console.log("res3", res3.value, res2.error);

返回:

res1 [] null
res2 [] null // <-- victory
res3 [] null

【讨论】:

【解决方案2】:

我对 Joi 有过类似的经历,答案是 Joi 关注的领域是验证。它不应该负责更改它接收到的数据(尽管他们已经在 string.replace 等中构建了这样的功能,这确实破坏了这个原则)。

如果您期待 nullArray 项目,您将需要构建 Joi 功能以验证您是否确实收到了 nullArray 项目,然后对收到的项目实施您自己的逻辑知道它将采用您定义的形式的数据。

【讨论】:

    猜你喜欢
    • 2022-11-12
    • 2018-09-24
    • 2018-02-03
    • 2020-05-26
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多