2017-06-16 4 views
1

Ich erstelle eine CouchApp und habe eine Frage über entfernte Datenbanken und die Erstellung eines PouchDB-Objekts.PouchDB relative entfernte Datenbank (mit CouchDB/Cloudant)

  • Die CouchApp ist von HTPS zur Verfügung: //subdomain.website.com/
  • Die CouchDB-Instanz auf HTPS ist: //username.cloudant.com/database
  • ich eine Rewrite-Regel verwenden, in der
  • Datenbank
  • Es gibt einen virtuellen Host von subdomain.website.com username.cloudant.com/database/_design/client/_rewrite
  • ich nicht Replikation verwenden, nur eine direkte Verbindung

Ich erstelle derzeit ein neues PouchDB-Objekt:

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

Aber ich würde eher instanziiert es als:

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

oder

var db = new PouchDB ('Datenbank');

Meine Vermutung ist, dass PouchDB sieht dies als eine lokale Datenbank statt einer Remote-Datenbank. Ist mein Denken korrekt und wie kann ich mein gewünschtes Ergebnis erzielen? Ich möchte den Hostnamen der URL entfernen, weil ich alles portierbar halten und über andere Server replizieren möchte.

Antwort

2

Da Sie eine vHost definiert, können Sie die folgende Problemumgehung mabye verwenden:

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

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

Gut aus der Box denken! Das hat mein Problem behoben. Ich habe eine zusätzliche Rewrite-Regel hinzugefügt, um das Umleiten von vhost zu ermöglichen: '{ " von ":"/database/* ", " zu ":" ../../../database/* " }' – bsmulders

0

ich derzeit ein neues PouchDB Objekt erstellen mit:

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

Aber ich würde eher instanziiert es als:

var db = new PouchDB ('Datenbank');

Nun, das ist keine Frage der persönlichen Präferenz, Sie benötigen möglicherweise eine entfernte Datenbank, eine lokale Datenbank oder beides.

Grundsätzlich als Entwickler Sie können eine Remote-Datenbank benötigen:

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

Auch Sie können eine lokale Datenbank benötigen:

const localDB=new PouchDB('localDatabase') 

Dann haben Sie wahrscheinlich könnte die Fernbedienung sync benötigen und lokale Datenbanken. Eigentlich ist die syncing was PouchDB wirklich glänzt bei.

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) 
}) 

Sie können read on für weitere Informationen: Zum Beispiel könnte die Synchronisierung wie dies getan werden.

+0

ich nicht eine lokale Datenbank noch Replikation verwenden als der Datensatz ziemlich groß ist. Das Remote-Dataset ist schreibgeschützt, und ich instanziiere PouchDB nur mit einer Remote-Instanz. Danach benutze ich alldocs, um die Datenbank abzufragen. – bsmulders

Verwandte Themen