Джой валидат игнорирует вложенные ключи - PullRequest
0 голосов
/ 18 октября 2018

Это моя проверка Joi:

let schema = Joi.object().keys({
  personal_info: Joi.object().keys({
    first_name: Joi.string().min(2).max(10).regex(Regex.alphabeta, 'alphabeta').required().error(JoiCustomErrors),
    last_name: Joi.string().min(2).max(10).regex(Regex.alphabeta, 'alphabeta').required().error(JoiCustomErrors),
    phone: Joi.string().min(10).max(10).regex(Regex.num, 'num').required().error(JoiCustomErrors),
    nickname: Joi.string().min(3).max(12).regex(Regex.alphanum, 'alphanum').required().error(JoiCustomErrors),
    birthday: Joi.date().max(`01-01-${new Date().getFullYear()-8}`).required().error(JoiCustomErrors),
    IDNumber: Joi.string().min(9).max(9).regex(Regex.num, 'num').required().error(JoiCustomErrors),
    address: Joi.object().keys({
      city: Joi.string().valid(Cities).required().error(JoiCustomErrors),
      street: Joi.string().min(2).max(15).regex(Regex.alphabeta, 'alphabeta').required().error(JoiCustomErrors),
      house_number: Joi.string().min(1).max(5).regex(Regex.alphanum, 'alphanum').error(JoiCustomErrors)
    })
  }),
  permission_level: Joi.number().min(1).max(9).required().error(JoiCustomErrors)
});
Joi.validate(req.body, schema, { abortEarly: false }, (err) => {
  if (err) return cast.joiError(err);
  return create_employee(result);
});

Объясните:

Все вложенные ключи, которые находятся внутри personal_info объекта, не проверяются.Это означает, что - если я возьму first_name и положу его на родителя (не в personal_info), он проверяется валидатором схемы - как и должно быть.

Что я делаю не так?

1 Ответ

0 голосов
/ 18 октября 2018

Используйте .required () для объекта схемы personal_info, и тогда он будет работать так, как вы ожидаете,

'use strict';
const Joi = require('joi');
let schema = Joi.object().keys({
    personal_info: Joi.object().keys({
        first_name: Joi.string().min(2).max(10).required(),
        last_name: Joi.string().min(2).max(10).required()
    }).required(),
    permission_level: Joi.number().min(1).max(9).required()
});
const req = {
    personal_info: {
        first_name: 'AAAA',
        last_name: 'CCCCCC'
    },
    permission_level: 2
};

Joi.validate(req, schema, (err) => {
    console.log(err);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...