PouchDB 相对远程数据库(使用 CouchDB / Cloudant)
PouchDB relative remote database (with CouchDB / Cloudant)
我正在创建 CouchApp,对远程数据库和创建 PouchDB 对象有疑问。
- 可从 htps://subdomain.website.com/
下载 CouchApp
- 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 的主机名,因为我想保持所有内容的可移植性并将其复制到其他服务器上。
I currently create a new PouchDB object using:
var db = new PouchDB('htps://username.cloudant.com/database');
But I would rather instantiate it as:
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了解更多信息。
由于您定义了虚拟主机,您可以使用以下解决方法:
var url = new URL(window.location.href);
var host = url.host;
var db = new PouchDB(host+"/database");
我想出来了)
我正在使用 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,
});
我正在创建 CouchApp,对远程数据库和创建 PouchDB 对象有疑问。
- 可从 htps://subdomain.website.com/ 下载 CouchApp
- 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 的主机名,因为我想保持所有内容的可移植性并将其复制到其他服务器上。
I currently create a new PouchDB object using:
var db = new PouchDB('htps://username.cloudant.com/database');
But I would rather instantiate it as:
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了解更多信息。
由于您定义了虚拟主机,您可以使用以下解决方法:
var url = new URL(window.location.href);
var host = url.host;
var db = new PouchDB(host+"/database");
我想出来了)
我正在使用 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,
});