Как импортировать/экспортировать базу данных из локальной базы данных PouchDB? Мне нужно сохранить мою локальную базу данных и открыть ее на другой платформе. На стороне сервера нет CouchDB.
Как импортировать/экспортировать базу данных из PouchDB
Ответ 1
Есть функции, закодированные удивительным @nolanlawson. Не только вы можете импортировать/экспортировать его, вы можете делать с ним всевозможные вещи. Просто потрясающе.
Репликация потока PouchDB https://github.com/nolanlawson/pouchdb-replication-stream
ReadableStreams и WritableStreams для репликации PouchDB/CouchDB. В принципе, вы можете копировать две базы данных, просто присоединяя потоки вместе. Это имеет много применений: дамп базы данных в файл и затем загрузите тот же файл в другую базу данных. Сделайте быстрый начальный репликации путем сброса содержимого CouchDB в конечную точку HTTP, который затем загружается в PouchDB в браузере. Репликация через Интернет Розетки? За Bluetooth? Над NFC? Почему нет? Поскольку репликация поток - это просто текстовый текст JSON, вы можете отправить его на любой транспорт механизм. Периодически создавайте резервную копию своей базы данных.
И PouchDB.load для импорта: https://github.com/nolanlawson/pouchdb-load
Клиентские инструменты для загрузки дампа из базы данных CouchDB/PouchDB. Для демпинга, проверьте pouchdb-dump-cli, чтобы свалить из командной строки, или pouchdb-replication-stream для сброса из Node.js выражение. Этот метод обычно намного быстрее, чем стандартный репликации, поскольку он использует меньше HTTP-запросов. Так что это отличный способ для быстрой загрузки исходного состояния для вашей базы данных.
Ответ 2
Чтобы экспортировать, почему бы вам просто не загружать все документы и не сохранять их в файл?
db.allDocs({include_docs: true, attachments: true}).then(JSON.stringify);
Ответ 3
Как сказал @mrded, самое простое решение - использовать пакетные операции:
<button onClick={handleExport}>Export</button>
<input type="file" onChange={handleImport}/>
function handleExport () {
db.allDocs({include_docs: true}, (error, doc) => {
if (error) console.error(error);
else download(
JSON.stringify(doc.rows.map(({doc}) => doc)),
'tracker.db',
'text/plain'
);
});
}
function handleImport ({target: {files: [file]}}) {
if (file) {
const reader = new FileReader();
reader.onload = ({target: {result}}) => {
db.bulkDocs(
JSON.parse(result),
{new_edits: false}, // not change revision
(...args) => console.log('DONE', args)
);
};
reader.readAsText(file);
}
}
Также проверьте функцию загрузки.