在Joi验证中将`null`视为`undefined`

时间:2016-06-24 22:14:10

标签: javascript validation joi

使用Joi验证并调整可选变量:

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

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

如何实现?

2 个答案:

答案 0 :(得分:3)

也为此苦了一段时间,但今天终于找到了解决方案。您必须使用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

答案 1 :(得分:0)

我和Joi有过类似的经历,答案是Joi关注的领域是验证。它不应该对更改它收到的数据负责(尽管它们已经构建了诸如string.replace之类的功能,这会破坏这个主体。)

如果您期望nullArray项,则需要构建Joi功能以验证您实际上已收到nullArray项,并且然后在接收到的数据上实现自己的逻辑,知道它将采用您定义的形式。