проверка схемы fastify с обрезкой

Я написал схему следующим образом

input: {
            type: "string",
            allOf: [
                {
                  transform: [
                    "trim"
                  ]
                },
                {
                  minLength: 1
                }
            ],
            transform: ["trim"],
            trim: true,
            description: "Input",
            minLength: 1,
            maxLength: 3
        }

Я хочу выполнить две вещи - я хочу обрезать ввод и проверить, что обрезанный ввод имеет minLength = 1. Я пробовал все разные конфигурации, которые мне приходилось делать для этого, но ни одна из них пока не сработала. Я использую fastify версии 3.0.0 и считаю, что он использует валидатор ajv для преобразования и проверки. Часть проверки работает, но обрезки не произошло.


person user3740951    schedule 07.08.2020    source источник


Ответы (1)


transform не является стандартной функцией json-схемы.

Итак, вам нужно настроить ajv, чтобы он заработал:

Обратите внимание, что массив allOf выполняется последовательно, поэтому, если вы переместите ключевое слово min/max в корневой документ, пробелы будут оценены!


const Fastify = require('fastify')
const fastify = Fastify({
  logger: true,
  ajv: {
    plugins: [
      [require('ajv-keywords'), ['transform']]
    ]
  }
})

fastify.post('/', {
  handler: async (req) => { return req.body },
  schema: {
    body: {
      type: 'object',
      properties: {
        input: {
          type: 'string',
          allOf: [
            { transform: ['trim'] },
            { minLength: 1 },
            { maxLength: 3 }
          ]
        }
      }
    }
  }
})

fastify.inject({
  method: 'POST',
  url: '/',
  payload: {
    input: '   foo   '
  }
}, (_, res) => {
  console.log(res.payload);
})
person Manuel Spigolon    schedule 07.08.2020
comment
Я столкнулся с этой проблемой. github.com/ajv-validator/ajv-keywords/issues/164 любые указатели, которые нужно разрешить, было бы здорово - person Rizwan Patel; 30.03.2021
comment
Ответьте по проблеме, речь идет о несовместимых версиях - person Manuel Spigolon; 31.03.2021