Appearance
serializeBodyData
serializeBodyData
— это функция, отвечающая за преобразование (сериализацию) данных, которые передаются в тело запроса (body
) методов post
, put
, patch
, delete
класса HttpClient
.
Для чего нужна
- Позволяет автоматически преобразовывать любые данные (объекты, строки, FormData и др.) в формат, который корректно воспринимается fetch в поле
body
. - Обеспечивает универсальность и удобство работы с разными типами данных без необходимости вручную сериализовать их в каждом запросе.
- Даёт возможность гибко переопределять логику сериализации для специфических кейсов (например, отправка файлов, нестандартные форматы, интеграция с legacy API).
Реализация по умолчанию
В библиотеке реализована функция defaultSerializeBodyData
, которая используется по умолчанию:
ts
export function defaultSerializeBodyData<Input = unknown>(
data: Input
): BodyInit | null | undefined {
if (data === undefined) return;
if (data == null) return null;
// Если это FormData, Blob, ArrayBuffer, URLSearchParams — возвращаем как есть
if (
(typeof FormData !== "undefined" && data instanceof FormData) ||
(typeof Blob !== "undefined" && data instanceof Blob) ||
(typeof ArrayBuffer !== "undefined" && data instanceof ArrayBuffer) ||
(typeof URLSearchParams !== "undefined" && data instanceof URLSearchParams)
) {
return data as BodyInit;
}
// Если это строка — возвращаем как есть
if (typeof data === "string") return data;
// Если это объект или массив — сериализуем в JSON
if (typeof data === "object" || Array.isArray(data)) {
return JSON.stringify(data);
}
// Для других типов (например, число, boolean) — преобразуем в строку
return String(data);
}
Как работает в HttpClient
- По умолчанию используется глобально для всех методов, если не указано иное.
- Можно переопределить глобально при создании клиента:ts
const client = new HttpClient({ serializeBodyData: (body) => { if (body instanceof FormData) return body; return JSON.stringify(body); }, });
- Можно переопределить для конкретного запроса через config:ts
await client.post("/upload", formData, { serializeBodyData: (data) => data, // отправляем FormData как есть только для этого запроса });
Рекомендации
- В большинстве случаев достаточно стандартной реализации — она покрывает все типовые сценарии (JSON, FormData, файлы, строки).
- Переопределяйте
serializeBodyData
, если:- Требуется особый формат сериализации (например, XML, Protobuf, кастомные бинарные данные).
- Необходимо реализовать специфическую логику для интеграции с нестандартными API.
- Для единичных случаев используйте локальное переопределение через config, для глобальных — через конструктор клиента.
Подробнее о настройке и примерах использования см. разделы: