Обрабатывайте `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
элемент, а затем реализовать свою собственную логику на полученных данных, зная, что они будут в форме, которую вы определили.