如何从CouchDB复制到PouchDB?

7

我已经搭建了一个本地的CouchDB数据库,希望能够使用在运行于localhost的网页上的JavaScript将其复制到PouchDB数据库。

使用下面的代码会遇到以下错误:

Origin http://localhost is not allowed by Access-Control-Allow-Origin.

如果将REMOTE中的http://去掉,就不会出现错误,但是没有显示任何被复制的文档。

从Chrome DevTools中查看IndexedDB数据库,可以看到已创建该数据库(但似乎没有文档)。

运行于Chrome 29.0.1535.2 canary。

我能在本地做这件事吗?还是需要搭建远程CouchDB数据库并启用CORS(如CouchDB文档所述)?

var REMOTE = 'http://127.0.0.1:5984/foo';
var LOCAL = 'idb://foo';

Pouch(LOCAL, function(error, pouchdb){
  if (error) {
    console.log("Error: ", error);
  } else {
    var db = pouchdb;
    Pouch.replicate(REMOTE, LOCAL, function (error, changes) {
      if (error) {
        console.log('Error: ', error);
      }
      else {
        console.log('Changes: ', changes);
        db.allDocs({include_docs: true}, function(error, docs) {
          console.log('Rows: ', docs.rows);
        });
    }});
  }
});
1个回答

10
你可以在本地执行,但需要启用CORS。
当你从远程URL中删除“http://”时,Pouch将把你的数据库复制到一个新的基于IndexedDB的Pouchdb中,名为“localhost”(或者实际上是“_pouch_localhost”或类似的添加了前缀)。
除非你从CouchDB本身(在同一主机和端口上)提供此页面,否则你需要启用CORS才能使与CouchDB的复制工作正常运行。

我能在本地主机上的CouchDB服务器上启用CORS吗?尝试从Futon启用CORS(httpd> cors为true,cors>凭据为true和false),但仍然出现错误:“OPTIONS http://127.0.0.1:5984/presentations/ 405(不允许使用该方法)pouchdb-nightly.min.js:1 OPTIONS http://127.0.0.1:5984/presentations/ Origin http://localhost不被Access-Control-Allow-Origin允许。 pouchdb-nightly.min.js:1 XMLHttpRequest无法加载http://127.0.0.1:5984/foo/. Origin http://localhost不被Access-Control-Allow-Origin允许。 localhost / node / foo /:1 ... Object {status:0}” - Sam Dutton
在本地主机上应该没有任何不同。也许在配置中设置httpd> enable_cors = true后,尝试重新启动Couch? - jches
谢谢@chesles--好建议,但是我尝试重新启动CouchDB(以及它运行的机器!),但仍然出现跨域错误:XMLHttpRequest cannot load http://127.0.0.1:5984/foo/. Origin http://localhost is not allowed by Access-Control-Allow-Origin. 我在重启后检查了Futon:httpd > enable_cors为true。 - Sam Dutton
2
@SamDutton,你的 cors > origins 配置部分有什么内容吗?如果有,请确保列表中包括 http://localhost。你可能还想进行一次合理性检查,并确保你正在运行 Couch 1.3.x,因为 1.2 及以下版本没有内置 CORS 支持。 - jches
2
BINGO:添加 cors > origins 就解决了问题。感谢您的坚持! - Sam Dutton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接