代码之家  ›  专栏  ›  技术社区  ›  Trevor

查找pouchdb错误的方向

  •  0
  • Trevor  · 技术社区  · 6 年前
    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个结果,rev 133,正确的结果。那么pouchdb是从哪里得到这个的呢?

    --编辑 删除 小袋 数据库似乎会在下次安装应用程序之前修复它。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Megidd    6 年前

    错误状态代码为 500 基于 the documentation 是:

    500-内部服务器错误

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

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

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

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


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

    enter image description here


    您提到:

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

    如果修订有问题,应收到 409 - Conflict 错误不是a 500 - Internal Server Error .


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

        2
  •  0
  •   Megidd    6 年前

    因此,Android现在使用google drive备份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
            };
        }
    }
    

    甚至一个口袋DB。销毁并不能完全清除问题。这有点像轨道解决方案中的核武器。