Как делать валидацию ссылки в celebrate?

Celebrate - это пакет middleware для Express.js, который используется для валидации данных, входящих в запросы. Если вы хотите сделать валидацию ссылки с помощью Celebrate, вам необходимо использовать встроенные проверки Celebrate или создать собственные проверки.

Для начала вам нужно установить и настроить Celebrate в вашем проекте. Выполните следующую команду в командной строке, находясь в корневом каталоге вашего проекта:

npm install celebrate

После установки, вам понадобится подключить Celebrate в файле вашего приложения. Для этого выполните следующий код:

const { celebrate, Joi, errors } = require('celebrate');
const express = require('express');

const app = express();

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.get('/api/link', celebrate({
  query: {
    link: Joi.string().uri().required()
  }
}), (req, res) => {
  // Ваш код обработки запроса
});

app.use(errors());

app.listen(3000, () => {
  console.log('Сервер запущен на порту 3000');
});

Здесь мы создаем пример простого Express.js приложения, которое принимает GET запрос на /api/link. Celebrate валидирует query параметры запроса. Joi.string().uri().required() - это пример встроенной проверки Celebrate, которая проверяет что значение параметра link является корректной ссылкой.

Вы можете использовать другие методы и проверки, предоставляемые Joi (npm пакет, на котором Celebrate основан), чтобы создавать более сложные правила валидации для ссылок. Например, вы можете добавить проверку на протокол ссылки (http, https), добавить опциональные параметры или ограничить длину ссылки.

app.get('/api/link', celebrate({
  query: {
    link: Joi.string().uri({
      scheme: ['http', 'https']
    }).required()
  }
}), (req, res) => {
  // Ваш код обработки запроса
});

Теперь при обращении к /api/link?link=https://example.com ваш сервер будет возвращать данные только в случае, если значение link будет корректной ссылкой с протоколами http или https.

Вы также можете создавать собственные функции валидации, описывая их внутри celebrate. Собственные функции валидации могут быть полезными, если у вас есть специфичные правила проверки ссылки, которые не предоставляются встроенными правилами Joi. Например:

const isUniqueLink = (value, helpers) => {
  // Проверка уникальности ссылки в базе данных или другим способом
};

app.get('/api/link', celebrate({
  query: {
    link: Joi.string().custom(isUniqueLink).required()
  }
}), (req, res) => {
  // Ваш код обработки запроса
});

Здесь isUniqueLink - это собственная функция валидации, которая проверяет, что значение link уникально. Вы можете заменить эту функцию на вашу собственную логику проверки.

Наконец, вы можете обрабатывать ошибки валидации Celebrate, используя middleware errors(). Это middleware сгенерирует и вернет ответ с соответствующей ошибкой в случае, если валидация не прошла:

app.use(errors());

Убедитесь, что этот middleware подключен после всех маршрутов, где используется Celebrate.

Вот и все! Теперь вы знаете, как делать валидацию ссылки с использованием Celebrate в Express.js. С помощью этого пакета вы можете создавать более сложные правила валидации для различных типов данных в вашем приложении.