Как выполнить репликацию с CouchDB на PouchDB?

Я настроил локальную базу данных CouchDB и хотел бы реплицировать ее в базу данных PouchDB, используя JavaScript на веб-странице, работающей на локальном хосте.

С приведенным ниже кодом я получаю эту ошибку:

Источник http://localhost не разрешен Access-Control-Allow-Origin.

Когда http:// удалено из REMOTE, я не получаю сообщения об ошибке, но никакие документы не отображаются как реплицированные.

Глядя на базы данных IndexedDB из Chrome DevTools, я вижу, что база данных была создана (но, похоже, не имеет документов).

Работает в Chrome 29.0.1535.2 canary.

Могу ли я сделать это локально или мне нужно настроить удаленную базу данных CouchDB и включить CORS (согласно документы CouchDB)?

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

person Sam Dutton    schedule 11.06.2013    source источник


Ответы (1)


Вы можете сделать это локально, но CORS должен быть включен.

Когда вы удаляете «http://» из удаленного URL-адреса, Pouch реплицирует вашу БД в новую Pouchdb, поддерживаемую IndexedDB, с именем «localhost» (или на самом деле «_pouch_localhost» или что-то в этом роде — он добавляет префикс).

Если вы не обслуживаете эту страницу из самого CouchDB (на том же хосте и порту), вам нужно будет включить CORS, чтобы репликация в CouchDB работала.

person jches    schedule 12.06.2013
comment
Могу ли я включить CORS для сервера CouchDB на локальном хосте? Попытался включить CORS из Futon (httpd › cors для true, а учетные данные cors › — как true, так и false), но все еще получаю ошибки: OPTIONS http://127.0.0.1:5984/presentations/ 405 (Method Not Allowed) pouchdb-nightly.min.js:1 OPTIONS http://127.0.0.1:5984/presentations/ Origin http://localhost is not allowed by Access-Control-Allow-Origin. pouchdb-nightly.min.js:1 XMLHttpRequest cannot load http://127.0.0.1:5984/foo/. Origin http://localhost is not allowed by Access-Control-Allow-Origin. localhost/node/foo/:1 ... Object {status: 0} - person Sam Dutton; 12.06.2013
comment
На локальном хосте все должно быть по-другому. Может попробовать перезапустить Couch после установки httpd > enable_cors = true в конфиге? - person jches; 12.06.2013
comment
Спасибо @chesles - хорошее предложение, но попытался перезапустить CouchDB (и машину, на которой она работает!), Но все еще получаю ошибку перекрестного происхождения: XMLHttpRequest cannot load http://127.0.0.1:5984/foo/. Origin http://localhost is not allowed by Access-Control-Allow-Origin. Я проверил в Futon при перезапуске: httpd › enable_cors верно - person Sam Dutton; 13.06.2013
comment
@SamDutton У вас есть что-нибудь в разделе конфигурации cors > origins? Если да, убедитесь, что в списке есть http://localhost. Вы также можете проверить работоспособность и убедиться, что вы используете Couch 1.3.x, поскольку 1.2 и более ранние версии не имеют встроенной поддержки CORS. - person jches; 13.06.2013
comment
БИНГО: добавление cors > origins помогло. Спасибо за ваше упорство! - person Sam Dutton; 14.06.2013