error:"unauthorized"
id:"_design/db"
message:"You are not a db or server admin."
name:"unauthorized"
ok:true
reason:"You are not a db or server admin."
rev:"137-81fe83389359c1cfb50bf928f3558b81"
status:500
Pouchdb尝试在完全卸载/重新安装应用程序后推送设计文档(因此本地pouchdb应该已被删除)。我猜这是在某个地方的变化流中。但奇怪的部分是couchdb是修订版133,而不是137。
我该如何解决这个问题?我尝试了一个小巧但不起作用。我能想到的唯一明显的答案是手动对沙发上的设计进行一系列修改,使其比137更新。
我使用此代码
对更改流进行了搜索var http=require('http');
var url = "http:/server/db/_changes?style=all_docs";
http.get(url, function(res){
var body = '';
res.on('data', function(chunk){
body += chunk;
});
res.on('end', function(){
var test = JSON.parse(body);
test.results.forEach(function(item,index){
if (item.id==="_design/db"){
console.log(item);
}
});
});
}).on('error', function(e){
console.log("Got an error: ", e);
});
得到1个结果,转133,正确的结果。那么pouchdb从哪里获得这个?
- 编辑 删除小包数据库似乎会修复它,直到安装下一个应用程序。
答案 0 :(得分:1)
基于the documentation的错误状态代码500
为:
500 - 内部服务器错误
请求无效,因为提供的JSON无效, 或无效信息是作为请求的一部分提供的。
此外,错误消息和原因提到:
消息:"您不是数据库或服务器管理员。"
原因:"您不是数据库或服务器管理员。"
我认为错误可能是由数据库管理员和成员权限引起的。因为普通数据库成员用户/角色不能PUT设计文档,只有数据库 admin 用户/角色可以PUT设计文档:
你提到过:
这真的只是因为手机有未来的版本 设计文档...
如果修订存在问题,则应收到409 - Conflict
错误,而不是500 - Internal Server Error
。
我不确定,只是一个想法。
答案 1 :(得分:0)
事实证明Android现在使用谷歌驱动器来备份indexdb。这导致安装的应用程序版本在测试期间数据库回滚后继续获取文档的未来版本。 我找到的唯一方法是做到这一点。
.on('denied', function (result) {
if (result.doc.error === "unauthorized" && result.doc.id === "_design/db") {
//catastrophic failure
var DBDeleteRequest = window.indexedDB.deleteDatabase("_pouch_");
DBDeleteRequest.onerror = function (event) {
console.error("Error deleting database.");
throw new Error("Error deleting database.");
};
DBDeleteRequest.onsuccess = function (event) {
console.log("Database deleted successfully");
window.location.reload(); //reload the app after purge
};
}
}
即使是pouchdb.destroy也无法完全解决问题。从轨道解决方案来看,这是一个核武器。