【问题标题】:PouchDB relative remote database (with CouchDB / Cloudant)PouchDB 相对远程数据库(使用 CouchDB / Cloudant)
【发布时间】:2017-11-19 04:21:03
【问题描述】:

我正在创建一个 CouchApp,并且对远程数据库和创建 PouchDB 对象有疑问。

  • CouchApp 可从 htps://subdomain.website.com/ 获得
  • CouchDB 实例位于 htps://username.cloudant.com/database 上
  • 我在数据库中使用了重写规则
  • 从 subdomain.website.com 到 username.cloudant.com/database/_design/client/_rewrite 有一个虚拟主机
  • 我没有使用复制,只有直接连接

我目前使用以下方法创建一个新的 PouchDB 对象:

var db = new PouchDB('htps://username.cloudant.com/database');

但我宁愿将其实例化为:

var db = new PouchDB('/database');

var db = new PouchDB('database');

我的猜测是 PouchDB 将其视为本地数据库而不是远程数据库。我的想法是否正确,我怎样才能得到我想要的结果?我想去掉 URL 的主机名,因为我想保持一切可移植性并将其复制到其他服务器上。

【问题讨论】:

    标签: database couchdb pouchdb cloudant


    【解决方案1】:

    我想通了)

    我正在使用create-react-app 并想使用proxy 指令,因此我可以将所有pouchdb 请求重定向到我的/couchdb1 端点并避免所有CORS 问题。

    所以你去:

    const COUCHDB_ROOT = '/couchdb1';
    const remoteDB = new PouchDB(COUCHDB_ROOT + '/userdb-626f62', {
      adapter: 'http',
      fetch: (url, opts) => {
        if (typeof url === 'string') {
          return PouchDB.fetch(COUCHDB_ROOT + url.split(COUCHDB_ROOT)[1], opts)
        } else {
          throw new Error('The url could be of a Request type.'); // TODO
        }
      },
      auth: {
        username: 'bob',
        password: 'bob',
      },
      skip_setup: true,
    });
    

    【讨论】:

      【解决方案2】:

      由于您定义了一个虚拟主机,您可以使用以下解决方法:

      var url = new URL(window.location.href);
      var host = url.host;
      
      var db = new PouchDB(host+"/database");
      

      【讨论】:

      • 开箱即用的好思维!这解决了我的问题。我确实添加了一个额外的重写规则以使 vhost 重新路由工作:{ "from": "/database/*", "to": "../../../database/*" }
      【解决方案3】:

      我目前使用以下方法创建一个新的 PouchDB 对象:

      var db = new PouchDB('htps://username.cloudant.com/database');

      但我宁愿将其实例化为:

      var db = new PouchDB('database');

      嗯,这不是个人喜好问题,您可能需要远程数据库、本地数据库或两者兼有。

      基本上,作为开发人员,您可能需要一个远程数据库:

      const remoteDB=new PouchDB('https://username.cloudant.com/database')
      

      另外,您可能需要一个本地数据库:

      const localDB=new PouchDB('localDatabase')
      

      然后,您可能需要sync 远程和本地数据库。实际上,syncing 才是 PouchDB 真正的亮点。例如,同步可能是这样完成的:

      localDB.sync(remoteDB,{live:true,retry:true}).on('complete',()=>{
          console.log('sync done')
      }).on('change',change=>{
          console.log('Something changed -> ',change)
      }).on('paused',info=>{
          console.log('Sync paused -> ',info)
      }).on('active',info=>{
          console.log('Sync is active again -> ',info)
      }).on('error',err=>{
          throw new Error(err)
      })
      

      您可以read on了解更多信息。

      【讨论】:

      • 我没有使用本地数据库,也没有使用复制,因为数据集相当大。远程数据集是只读的,我仅使用远程实例来实例化 PouchDB。之后我使用 alldocs 来查询数据库。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多