Пользовательская ошибка Joi для каждого варианта проверки

У меня есть Joi схема, и я хочу указать собственное сообщение об ошибке для каждого из вариантов.

Пример моей схемы:

const schema = Joi.object().keys({
    name: Joi.string()
      .min(5).error(() => 'first message')
      .max(25).error(() => 'second message')
      .required().error(() => 'third message')
)}

На данный момент эта проверка работает следующим образом: если какая-либо из опций недействительна, появляется только третье сообщение.

Ожидаемое поведение - появляется сообщение об ошибке в зависимости от того, какая опция недействительна (как поведение Joi по умолчанию, но с моим собственным сообщением об ошибке).

Спасибо с уважением!


person Orest Bats    schedule 01.03.2019    source источник


Ответы (2)


const schema = Joi.object().keys({
title: Joi.string()
  .min(5)
  .max(25)
  .required()
  .messages({
  "string.min": "first msg",
  "string.max": "second msg",
  "any.empty":"third msg"
      })
  })

Это лучший способ показать настраиваемые сообщения об ошибках.

person SurendraSawant    schedule 13.01.2020
comment
Это намного лучше и понятнее, чем принятый ответ. - person Aman Gupta; 03.05.2020

Для моей ситуации я нашел такое решение:

const schema = Joi.object().keys({
    title: Joi.string()
      .min(5)
      .max(25)
      .required()
      .error((errors) => {
        return errors.map(error => {
          switch (error.type) {
            case "string.min":
              return { message: "first msg" };
            case "string.max":
              return { message: "second msg" };
            case "any.empty":
              return { message: "third msg" };
          }
        }
        )
      })

Кажется, не лучший, так как вызывает слишком много кода, особенно если у вас большая форма, но она работает так, как я хочу.

person Orest Bats    schedule 03.03.2019