Обрабатывайте `null` как`undefined` в проверке Joi

Необязательная переменная проверяется и определяется с помощью Joi:

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

Замена undefined с null является общим и удобным для необязательных параметров, он должен лечить null как undefined и вернуться к значению по умолчанию.

Как это может быть достигнуто?

2 ответа

Решение

Также боролся с этим некоторое время, но сегодня наконец-то нашел решение. Вы должны использовать 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

У меня был похожий опыт с Джои, и ответ таков: область интересов Джои - валидация. Он не должен нести ответственность за изменение данных, которые он получает (хотя они встроили такие функции, как string.replace который нарушает этот принцип).

Если вы ожидаете null или же Array предметы, вам нужно будет создать функциональность Joi, чтобы подтвердить, что вы на самом деле получили null или же Array элемент, а затем реализовать свою собственную логику на полученных данных, зная, что они будут в форме, которую вы определили.

Другие вопросы по тегам