0

可选变量通过 Joi 进行验证和调节:

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

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

如何实现?

4

2 回答 2

4

也为此苦苦挣扎了一段时间,但今天终于找到了解决方案。您必须使用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
于 2018-07-27T13:05:00.043 回答
0

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

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

于 2016-06-24T22:34:26.583 回答