2013-06-11 3 views
7

Ho creato un database CouchDB locale e mi piacerebbe replicarlo su un database PouchDB, utilizzando JavaScript in una pagina Web in esecuzione su localhost.Come replicare da CouchDB a PouchDB?

Con il codice sotto ottengo questo errore:

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

Con http:// rimossa dal REMOTE, non ottengo un errore, ma non documenti sono mostrati come replicati.

Guardando i database IndexedDB da Chrome DevTools, posso vedere che il database è stato creato (ma non sembra avere documenti).

In esecuzione in Chrome 29.0.1535.2 canarino.

Posso farlo localmente oppure devo impostare un database CouchDB remoto e abilitare CORS (come da CouchDB docs)?

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

risposta

10

È possibile farlo localmente, ma CORS deve essere abilitato.

Quando si rimuove "http: //" dall'URL remoto, Pouch sta per replicare il DB in un nuovo Pouchdb con supporto IndexedDB denominato "localhost" (o in realtà "_pouch_localhost" o qualcosa del genere - aggiunge un prefisso).

A meno che non stiate servendo questa pagina da CouchDB stesso (sulla stessa porta host &), sarà necessario abilitare CORS affinché la replica su CouchDB funzioni.

+0

Posso abilitare CORS per un server CouchDB su localhost? Ho provato a abilitare CORS da Futon (httpd> cors a true e cors> credenziali sia true che false) ma ottenendo ancora errori: 'OPTIONS http://127.0.0.1:5984/presentations/ 405 (Method Not Allowed) pouchdb-nightly. min.js: 1 OPZIONI http://127.0.0.1:5984/presentations/ Origine http: // localhost non è consentito da Access-Control-Allow-Origin. pouchdb-nightly.min.js: 1 XMLHttpRequest non può caricare http://127.0.0.1:5984/foo/. Origine http: // localhost non è consentito da Access-Control-Allow-Origin. localhost/node/foo /: 1 ... Object {status: 0} ' –

+0

Non dovrebbe essere diverso su localhost. Forse prova a riavviare Couch dopo aver impostato 'httpd> enable_cors = true' nella configurazione? – chesles

+0

Grazie a @chesles - buon suggerimento, ma ho provato a riavviare CouchDB (e la macchina sta funzionando!) Ma otteniamo comunque l'errore di origine incrociata: 'XMLHttpRequest non può caricare http://127.0.0.1:5984/foo/. Origine http: // localhost non è consentito da Access-Control-Allow-Origin. Ho riavviato Futon al riavvio: httpd> enable_cors è vero –