Пользовательская проверка Joi

Я использую Joi для проверки некоторых данных от пользователя. Я использую его с таким модулем:

const Joi = require('joi')

// User validation rules
module.exports = {
  create: {
    body: {
      email: Joi.string().email().required(),
      password: Joi.string().min(6).max(128).required(),
      name: Joi.string().max(128).required()
    }
  },
  update: {
    body: {
      password: Joi.string().min(6).max(128).required(),
      name: Joi.string().max(128).required()
    }
  }
}

а затем в маршрутизаторе я передаю его как промежуточное ПО:

router.post('/register', validator(create), userController.register)

Для обновления я хочу создать собственный валидатор с таким кодом:

const json = { 
  "email":"[email protected]",
  "password":"someNewPass",
  "name":"John Smith",
  "activationKey":"123123",
  "active":false,
  "resetPasswordKey":"123123"
}

const forbiddenFields = ["email", "activationKey", "active", "resetPasswordKey"];

const validate = (json, forbidden) => {
  for(let i = 0; i < forbidden.length; i++) {
    if(json.hasOwnProperty(forbidden[i])) {
      return false;
    }
  }
  return true;
}

const isValid = validate(json, forbiddenFields)
console.log('is json valid? ', isValid)

Я нашел метод расширения в Joi API, но пример настолько запутан, что я не могу создать настраиваемую проверку с моим кодом.


person BT101    schedule 03.07.2019    source источник


Ответы (1)


Вы можете использовать запрещенные ключи.

const input = {
    email: '[email protected]',
    activationKey: 123
};

const schema = {
    email: Joi.string().email(),
    activationKey: Joi.any().forbidden()
};

const result = Joi.validate(input, schema);

if (result.error) {
    console.log(result.error.details)
}
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/joi-browser.min.js"></script>

person antonku    schedule 03.07.2019