Как я могу выполнить пользовательскую проверку для другого ключа в моей схеме? - PullRequest
0 голосов
/ 11 апреля 2019

Я использую Joi для проверки данных, отправленных пользователем. Данные содержат банковские реквизиты: соответствующие здесь accountNumber и sortCode. Мне нужно взять значение обоих входов и запустить их через внешний API, чтобы убедиться, что они действительны вместе.

Я изо всех сил пытаюсь написать собственное расширение Joi, которое может получить значение другого поля в данных. Вот упрощенная версия того, что я пробовал:

const baseJoi = require('joi');

const bankDetails = joi => {
    return {
        name: 'bankDetails',
        base: joi.number().required(),
        rules: [
            {
                name: 'accountNumber',
                params: {
                    number: joi.number().required()
                },
                validate(params, value, state, options) {
                    console.log(value); // returns 12-34-46 (sortCode)
                    console.log(params.number); // returns a [Function: ref] object
                    console.log(state.parent.accountNumber); // returns 88888888, but feels "wrong"
                }
            }
        ]
    };
};

const Joi = baseJoi.extend([bankDetails]);

const validateBankDetails = () => {
    return Joi.bankDetails().accountNumber(Joi.ref('accountNumber')).required();
};

const schema = Joi.object({
    accountNumber: Joi.number().required(),
    sortCode: validateBankDetails(),
});

Я знаю, что могу использовать Joi.ref() внутри собственных валидаторов Джои (например, что-то вроде Joi.number().less(Joi.ref('max'))), но здесь мне нужно взять значение этого ключа (accountNumber) и передать его через в другую функцию (вместе со значением sortCode). Есть ли одобренный Joi способ сделать это? Я могу получить желаемое значение из параметров state, но это немного анти-паттерн.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...