Fastify и проверка схемы Ajv

Я пытаюсь проверить параметр строки запроса "hccid", как показано ниже. Похоже, проверка не работает для меня. Кто-нибудь может увидеть, что мне не хватает?

const fastify = require('fastify')({
  ajv: {
        removeAdditional: true,
        useDefaults:      true,
        coerceTypes:      true
    }
});


const schema = {
    querystring: {
       hccid: { type: 'string' }
    }
};

// Declare a route
 fastify.get('/hello', {schema}, function (request, reply) {
    const hccid = request.query.hccid;
    reply.send({ hello: 'world' })
});

// Run the server!
fastify.listen(3000, function (err) {
if (err) throw err
  console.log(`server listening on ${fastify.server.address().port}`)
});

Так что с этим кодом я должен получить исключение проверки схемы, когда я вызываю службу с полным новым запросом abc как я показал ниже

http://localhost:3000/hello?abc=1

но не было ошибки. Я получил ответ {"hello":"world"}

Я также попытался удалить queryparam все вместе http://localhost:3000/hello

и я все еще получил {"hello":"world"}

очевидно, проверка не работает. Чего не хватает в моем коде? любая помощь будет оценена.

2 ответа

Решение

Эта структура схемы решила мою проблему. На всякий случай, если кто-то захочет проверить это, если они столкнутся с подобной проблемой.

const querySchema = {
    schema: {
       querystring: {
         type: 'object',
           properties: {
             hccid: {
               type: 'string'
             }
         },
       required: ['hccid']
     }
  }
}

Согласно документам, вы можете использовать или для форматирования ввода из URL-адреса.

Пожалуйста, обратитесь к приведенному выше ответу в качестве примера.

Проверка

Внутренняя проверка маршрута зависит от который является высокопроизводительным валидатором схемы JSON. Проверить ввод очень просто: просто добавьте нужные поля в схему маршрута, и все готово!

Поддерживаемые проверки:

  • body: проверяет тело запроса, если это метод POST, PUT или PATCH.
  • querystring или query: проверяет строку запроса.
  • params: проверяет параметры маршрута.
  • headers: проверяет заголовки запроса.

[1] Источник: https://www.fastify.io/docs/latest/Validation-and-Serialization/#validation.

[2] Ajv @ v6 : Ajv v6,https://www.npmjs.com/package/ajv/v/6.12.6

Другие вопросы по тегам