В вашем коде есть ряд проблем, которые приводят к неправильному использованию PouchDB и могут привести к проблемам.
Прежде всего, бессмысленно давать документу то же самое идентификатор в качестве имени вашей базы данных. Предполагая, что вы хотите использовать одну базу данных для каждого пользователя, вы можете использовать два подхода:
Подход с несколькими документами Вместо этого вы можете создать несколько документов в одной базе данных с разными идентификаторами. Например, информация о вашем согласии может храниться так:
var id = "p" + Date.now() + "-" + Math.floor(Math.random() * 10000);
let dblocal = new PouchDB(id);
document.cookie = id;
let dbremote = 'http://localhost:5984/experiment';
dblocal.put({
_id: "consent",
consent: window.document.consent_form.consent_to_share.value
});
dblocal.replicate.to(dbremote, {live: true});
В то время как информация о вашем списке воспроизведения хранится так:
dblocal.put({
_id: "playlist",
name: playlistname,
itemsChecked: checkedlist
});
Подход с одним документом Второй вариант - хранить один документ, содержащий всю информацию, которую вы хотите сохранить, которая связана с пользователем. При таком подходе вы захотите получить существующий документ и обновить его при появлении новой информации. Предполагая, что вы назвали свой документ global-state
(т.е. замените «согласие» в первом фрагменте кода на «глобальное состояние»), следующий код обновит документ:
dblocal.get("global-state").then((doc)=>{
doc.loggedIn = true; // or change any other information you want
return dblocal.put(doc);
}).then((response)=>{
//handle response
}).catch((err)=>{
console.log(err);
});
Кроме того, вам следует только вызвать
dblocal.replicate.to(dbremote, {live: true});
работает один раз, потому что опция 'live' указывает, что будущие изменения будут автоматически реплицироваться в удаленную базу данных.