【发布时间】:2020-01-30 22:13:01
【问题描述】:
我正在尝试创建一个包含“用户”及其数据的数据库。奇怪的是,当我第三次尝试时,它并没有 put() 新变量。为此,我创建了一个本地数据库dblocal,并将这个数据库复制到名为dbremote 的远程数据库。首先,我创建一个包含一个变量的文档。
function newuser() {
if (window.document.consent_form.consent_to_share.value) {
var id = "p" + Date.now() + "-" + Math.floor(Math.random() * 10000);
var dblocal = new PouchDB(id);
var consenttoshare = window.document.consent_form.consent_to_share.value;
document.cookie = id;
var dbremote = 'http://localhost:5984/experiment';
dblocal.put({
_id: id,
consent: consenttoshare
});
dblocal.replicate.to(dbremote, {live: true});
}
}
这一切都很好,在另一个 js 文件中,我试图通过执行以下函数 putdb() 将变量添加到同一个文档中。我按以下方式执行此操作(如他们的文档中所述是正确的方式):
function putdb () {
if (document.cookie){
var id = document.cookie;
var loggedin = "True";
var dblocal = new PouchDB(id);
dblocal.get(id).then(function (doc) {
doc.loggedin = loggedin;
return dblocal.put(doc);
}).then(function () {
return dblocal.get(id);
}).then(function (doc) {
console.log(doc);
var dbremote = 'http://localhost:5984/experiment';
dblocal.replicate.to(dbremote, {live: true});
});
}
}
这成功地将变量loggedin 添加到了我想要的文档中。但是,在第三次尝试向该文档添加信息时(再次在另一个 js 文件中),没有任何反应。我使用了与以前完全相同的方法,但只使用了不同的变量。
function putdb (checked) {
if (document.cookie) {
var id = document.cookie;
var checkedlist = [];
for (i = 0; i < checked; i++) {
checkedlist.push($("input[type=checkbox]:checked")[i].value)
}
var playlistname = document.getElementById("playlistname").value;
var dblocal = new PouchDB(id);
dblocal.get(id).then(function (doc) {
doc.checkedlist = checkedlist;
doc.playlistname = playlistname;
return dblocal.put(doc);
}).then(function () {
return dblocal.get(id);
}).then(function (doc) {
console.log(doc);
var dbremote = 'http://localhost:5984/experiment';
dblocal.replicate.to(dbremote, {live: true});
});
}
}
我检查了所有变量,它们是正确的。 我尝试了纯文本变量。 该脚本确实运行。 我尝试像第一次那样在文档中添加信息。 所有这些似乎都没有像我在最后一个函数中想要的那样向文档添加另一个变量。我认为这与我不知道的 pouchDB 的工作方式有关。非常感谢您的帮助!
【问题讨论】:
-
随着时间的推移创建和忘记这样的本地数据库可能会创建一个 巨大 的废弃 IndexedDB pouch 实例(浪费用户空间)。为所有用户使用具有一致名称的单个数据库。此外,您的 _id 存在风险,因此请准备好处理 409。由于您的 _id 不传达信息,请考虑使用 uuidjs/uuid 或类似的。
-
事实证明,问题出在异步代码上。该函数没有完全检索到承诺,但已经转到下一页。
标签: javascript couchdb pouchdb