Record (Запросы API) / Продвинутые настройки 
В этом разделе мы разберём расширенные возможности работы с Record. Если базовое использование ограничивается простыми вызовами API, то здесь будут рассмотрены ситуации, когда требуется гибкая настройка поведения запросов, а также оптимизация под конкретные сценарии.
Ограничение запроса, одним активным 
Метод .oneRequestAtTime() ограничивает выполнение только одним активным запросом одновременно.
- Если запрос уже выполняется, повторный вызов не запускает новый, а возвращает ссылку на текущий.
 
- Это помогает избежать "дублирующих" запросов при быстрых кликах или множественных обновлениях состояния.
 
import { Record } from "nuxoblivius";
const posts = Record.new("/api/posts", []);
posts.oneRequestAtTime();import { Record } from "nuxoblivius";
const posts = Record.new("/api/posts", []);
posts.oneRequestAtTime(false);Таким образом, вы гарантируете, что в каждый момент времени выполняется ровно один запрос.
Отправлять запрос, только если нет данных 
Особенности: Не поддерживает SSR
Метод .onlyOnEmpty() разрешает выполнять запрос только в том случае, если у текущего Record ещё нет данных.
- Если данные уже загружены, новый вызов запроса проигнорируется.
 
- Особенно полезно для кэшированных или одноразовых запросов, когда нет необходимости повторно обращаться к серверу.
 
import { Record } from "nuxoblivius";
const posts = Record.new("/api/posts", []);
posts.onlyOnEmpty();import { Record } from "nuxoblivius";
const posts = Record.new("/api/posts", []);
posts.onlyOnEmpty(false);Такой подход снижает нагрузку на сервер и ускоряет работу приложения за счёт повторного использования уже полученных данных.
Регулирование отчистки данных, во время запроса 
Метод .swapMethod() управляет тем, когда реактивный response должен обновляться в процессе выполнения запроса.
Доступные режимы:
greedy— реактивныйresponseобновляется сразу после отправки запроса. Полезно, если нужно мгновенно показать состояние (например, сбросить список при фильтрации).
lazy— используется для работы с дополнительными модулями (кэширование, взаимствование). Работает какgreedy, но если ни один модуль не предоставит данные,responseоткатывается к значению по умолчанию.
hot— реактивныйresponseобновляется только после завершения запроса. Это стандартное и безопасное поведение: данные меняются, только когда есть результат.
import { Record } from "nuxoblivius";
const posts = Record.new("/api/posts", []);
posts.swapMethod("hot");import { Record } from "nuxoblivius";
const posts = Record.new("/api/posts", []);
posts.swapMethod("lazy");import { Record } from "nuxoblivius";
const posts = Record.new("/api/posts", []);
posts.swapMethod("greedy");Таким образом, можно гибко контролировать момент подмены реактивных данных в зависимости от сценария.
Конкатенация данных 
Метод .appendsResponse() позволяет управлять тем, как будут обновляться данные, если ответ от сервера имеет формат массива.
- По умолчанию новые данные заменяют текущий массив.
 
- Если включить
 .appendsResponse(), новые данные будут добавляться в конец списка.
Это особенно удобно для реализации постраничной подгрузки (infinite scroll).
import { Record } from "nuxoblivius";
const posts = Record.new("/api/posts", []);
posts.appendsResponse();import { Record } from "nuxoblivius";
const posts = Record.new("/api/posts", []);
posts.appendsResponse(false);Таким образом, Record можно использовать как основу для бесконечной ленты данных.
Динамическая перезагрузка данных 
Особенности: Не поддерживает SSR
Метод .reloadBy() позволяет автоматически перезапускать запрос при изменении указанной реактивной переменной.
Это удобно, когда данные напрямую зависят от состояния интерфейса или параметров фильтрации.
import { Record } from "nuxoblivius";
import { shallowRef } from "vue";
const someFilter = shallowRef("value");
const posts = Record.new("/api/posts", []);
posts.reloadBy(someFilter, { componentScope: false });import { Record } from "nuxoblivius";
import { shallowRef } from "vue";
const someFilter = shallowRef("value");
const posts = Record.new("/api/posts", []);
posts.reloadBy(someFilter);
// или
posts.reloadBy(someFilter, { componentScope: true });import { Record } from "nuxoblivius";
import { shallowRef } from "vue";
const someFilter = shallowRef("value");
const posts = Record.new("/api/posts", []);
const cancelAutoReload = posts.reloadByControlled(someFilter);
cancelAutoReload();Таким образом, Record всегда будет содержать актуальные данные в зависимости от значения реактивной переменной.
Авторизация 
Метод .auth() задаёт заголовок Authorization для текущего Record. Используется для работы с API, которые требуют авторизацию.
Кроме того, в Record предусмотрены статические методы для удобной генерации стандартных схем:
Record.Basic(login, password)— создаёт заголовок Basic ...
Record.Bearer(token)— создаёт заголовок Bearer ...
import { Record } from "nuxoblivius";
const posts = Record.new("/api/posts", []);
posts.auth(Record.Bearer("some_token_value"));import { Record } from "nuxoblivius";
const posts = Record.new("/api/posts", []);
posts.auth(Record.Basic("login", "password"));import { Record } from "nuxoblivius";
const posts = Record.new("/api/posts", []);
posts.auth(null);Таким образом, можно быстро подключать разные схемы авторизации без ручной сборки строки.
Глобальный хук SetDefaultAuth() 
Метод SetDefaultAuth(), позволяет глобально всем Record, задать заголовок Authorization.
import { SetDefaultAuth } from "nuxoblivius";
SetDefaultAuth("some_auth_data");import { SetDefaultAuth } from "nuxoblivius";
SetDefaultAuth(() => "some_auth_data");Общий сброс данных 
Метод .reset() позволяет одной командой сбросить состояние Record частично или полностью. Это упрощает управление жизненным циклом данных, особенно при работе с фильтрами, пагинацией и динамическими параметрами.
Параметры config:
pagination: boolean— сброс пагинации к начальному состоянию.
response: boolean— очистка текущего ответа и возврат к значению по умолчанию.
query: boolean— очистка динамических query-параметров (аналог метода .clearDynamicQuery()).
По умолчанию все параметры установлены в false.
import { Record } from "nuxoblivius";
const posts = Record.new("/api/posts", []);
posts.reset({ pagination: true, response: true, query: true });Таким образом, .reset() позволяет гибко контролировать и обнулять нужные части состояния Record.
Отмена запроса ^1.7.17 
Иногда возникает необходимость прервать запрос: например, при уходе пользователя со страницы, переключении вкладок, который делает старый запрос неактуальным.
В Nuxoblivius для этого предусмотрены методы:
.abortRequests(abortCode) 
Отменяет текущие запросы у конкретного Record.
В обработчик .onFailure() дополнительно передаётся информация:
- что ошибка вызвана именно абортом;
 
- код аборта (abortCode) для идентификации причины.
 
import { Record } from "nuxoblivius";
const posts = Record.new("/api/posts", []);
posts.abortRequests(401);tryAbortAllRequest(abortCode) 
Отменяет все активные запросы у всех Record одновременно.
Полезно, если нужно быстро остановить все фоновые операции, например при глобальном logout.
import { tryAbortAllRequest } from "nuxoblivius";
tryAbortAllRequest(401);Таким образом, система абортов помогает гибко контролировать запросы и предотвращать гонки данных.
