2017-06-12 82 views
0

只複製我想有一個本地的瀏覽器DB從遠程源自我更新。我試圖使用pouchdb/cloudant來解決這個問題。遠程數據庫被許多客戶端使用,因此應該只讀且不需要驗證。在cloudant我的權限配置的相關數據庫(如「remoteDB」)如下:閱讀遠程pouchdb

{"cloudant":{"admin_user":["_writer","_admin","_replicator","_reader"],"nobody":["_reader"],"apiKey":["_writer","_admin","_replicator","_reader"]}} 

在我的設置代碼中,我有以下幾點:

var localDB = new PouchDB('local'); 
var remoteDB = new PouchDB('https://account.cloudant.com/remoteDB'); 

localDB.replicate.from(remoteDB, {live: false}).on('change', function (change) { 
    console.log("change", change); 
}).on('error', function (err) { 
    console.log("err-replicate", err); 
}); 

我得到一個401未經授權錯誤時加載一個包含這個的頁面。導致此請求是針對PUT請求:

https://account.cloudant.com/remoteDB/_local/JqXQso2dZEjdZsU1e_2Qxw==

頭PARAMS是:

  • _id:_local/JqXQso2dZEjdZsU1e_2Qxw ==
  • last_seq: 「0」

如果我有cloudant nobody用戶對這個數據庫有作家權限錯誤消失。任何想法這裏有什麼不對?

這是有單向複製從遠程源的正確方法?

+0

似乎修復可能會將_replicator權限添加到任何用戶 –

回答

1

您所看到的錯誤是PouchDB試圖寫入「檢查點」文件到遠程數據庫Cloudant。該檢查點標記出客戶端得到了在修訂時間表,使未來的複製,因爲他們可以從他們離開的地方重新開始更高效。

您正確地猜測解決此問題的方法是爲只讀複製授予對用戶(或所有人)「讀取器」權限的「_reader」&「_replicator」權限。該_replicator權限允許寫入本地文檔,而不是核心文件本身。這足以允許保存檢查點文檔,並使PouchDB無任何錯誤地繼續。