Couchdb 在错误上寻找方向

Couchdb 在错误上寻找方向,couchdb,pouchdb,Couchdb,Pouchdb,在完全卸载/重新安装应用程序后,PockDB正在尝试推送设计文档(因此本地PockDB应该已被删除)。我猜这是在某个地方的变化流。但奇怪的是couchdb的版本是133,而不是137 我该如何解决这个问题?我试过一辆小型车,但没用。我能想到的唯一明显的答案是手动修改沙发上的设计,使其比137更新 我使用这段代码对变更流进行了搜索 error:"unauthorized" id:"_design/db" message:"You are not a db or server admin." nam

在完全卸载/重新安装应用程序后,PockDB正在尝试推送设计文档(因此本地PockDB应该已被删除)。我猜这是在某个地方的变化流。但奇怪的是couchdb的版本是133,而不是137

我该如何解决这个问题?我试过一辆小型车,但没用。我能想到的唯一明显的答案是手动修改沙发上的设计,使其比137更新

我使用这段代码对变更流进行了搜索

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
得到了1个结果,版本133,正确的结果。那么这是从哪里来的呢

--编辑
删除邮袋数据库似乎可以修复它,直到下一个应用程序安装。

错误状态代码为
500
,基于is:

500-内部服务器错误

请求无效,或者是因为提供的JSON无效, 或作为请求的一部分提供了无效信息

此外,错误消息和原因还提到:

消息:“您不是db或服务器管理员。”

原因:“您不是db或服务器管理员。”


我认为这个错误可能是由数据库管理员和成员权限引起的。因为普通数据库成员用户/角色不能放置设计文档,只有数据库管理员用户/角色可以放置设计文档:


你提到:


这真的只是因为手机有未来版本的 设计文档

如果修订有问题,则应收到
409-冲突
错误,而不是
500-内部服务器错误



我不确定,这只是一个想法。

因此,安卓现在使用谷歌硬盘对indexdb进行备份。这导致安装的应用程序版本在测试期间数据库回滚后继续获取文档的未来版本。 我找到的唯一解决办法就是这样做

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);
});

即使是一个db.destroy也不能完全解决这个问题。这有点像orbit解决方案中的核武器。

据我所知,
未经授权
意味着你必须提供管理员用户名/密码?这真的只是因为手机有一些未来版本的设计文档,它无权推回到沙发上。但似乎每次安装应用程序时,Android都会以某种方式还原这个未来版本。@user3405291我已经将部分问题隔离到了Android 7.1上。在升级或卸载应用程序时,cordova不再使用webview(不知道它使用的是什么)。无论它使用什么,都要保留所有cookie、pockDB、IndexDB和一些脱机存储。SQLlite看起来确实被删除了,但我正在对此进行彻底测试。它试图推送设计文档的未来版本,但作为一个没有权限这样做的用户。所以拒绝访问是有道理的。
.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
        };
    }
}