PouchDB相对远程数据库(带CouchDB / Cloudant)

wdebmtf2  于 2022-12-09  发布在  CouchDB
关注(0)|答案(3)|浏览(153)

我正在创建一个CouchApp,并有一个关于远程数据库和创建PouchDB对象的问题。

  • CouchApp可从htps://www.example.com获得subdomain.website.com/
  • CouchDB示例位于htps://www.example.com上username.cloudant.com/database
  • 我在数据库中使用重写规则
  • 存在从www.example.com到www.example.com的虚拟主机subdomain.website.comusername.cloudant.com/database/_design/client/_rewrite
  • 我不使用复制,只使用直接连接

我目前使用以下代码创建了一个新PouchDB对象:
用户名:
但我宁愿将其示例化为:
数据库名称:

数据库中的所有数据都是空的。
我猜PouchDB会把这个数据库看作本地数据库而不是远程数据库。我的想法是正确的吗?我怎样才能得到我想要的结果呢?我想去掉URL的主机名,因为我想保持所有内容都是可移植的,并将其复制到其他服务器上。

jbose2ul

jbose2ul1#

由于您定义了vhost,因此可以使用以下解决方法:

var url = new URL(window.location.href);
var host = url.host;

var db = new PouchDB(host+"/database");
h22fl7wq

h22fl7wq2#

我能够弄清楚)
我正在使用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,
});
9wbgstp7

9wbgstp73#

我目前使用以下代码创建了一个新PouchDB对象:
用户名:
但我宁愿将其示例化为:
数据库中的所有数据都是空的。
这不是个人喜好的问题,您可能需要远程数据库、本地数据库,或者两者都需要。
基本上,作为开发人员,您可能需要一个远程数据库:

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了解更多信息。

相关问题