Использование API LocalStorage для сохранения базы данных Miragejs

Читая документацию по miragejs, на этой странице говорится:

Mirage сбрасывает свое состояние при каждой перезагрузке браузера, что может быть палкой о двух концах, но часто это то, что вам нужно для разработки и тестирования. (Вы можете использовать localStorage, если хотите добавить в Mirage временную сохраняемость.)

Однако я не могу найти где-либо документации или примеров того, как на самом деле настроить локальное хранилище для сохранения db.

Кто-нибудь имеет опыт работы с этим или знает некоторые примеры кода или пошаговые руководства, на которые я мог бы сослаться?

2 ответа

грубым решением было бы сбрасывать БД после каждой модификации:

      const server = createServer(...);

// https://miragejs.com/api/classes/server/#pretender
server.pretender.handledRequest = function(verb) {
  if (verb.toLowerCase() !== 'get' && verb.toLowerCase() !== 'head') {
    localStorage.setItem('db', JSON.stringify(server.db.dump()));
  }
};

и восстановить его при создании сервера:

      const dbData = localStorage.getItem('db');

if (dbData) {
  // https://miragejs.com/api/classes/db/#load-data
  server.db.loadData(JSON.parse(dbData));
}

Ответ Дэна работает отлично, но есть один побочный эффект, о котором вам следует знать: вы перезаписываете исходную функцию обратного вызова Mirage, которая отвечает за регистрацию запроса в консоли.

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

      const mirageRequestHandler = server.pretender.handledRequest;
server.pretender.handledRequest = (verb, path, request) => {
    if (!['get', 'head'].includes(verb.toLowerCase())) {
        setLocalDb(server);
    }

    mirageRequestHandler(verb, path, request);
};
Другие вопросы по тегам