Использование 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);
};