2017-01-03 8 views
0

Я пытаюсь сделать следующее: у меня есть локальная база данных (с использованием PouchDB), я проверяю, зарегистрирован ли пользователь (с функцией входа в систему с помощью функции pouchdb), и если true, я синхронизирую локаль db с удаленный один.Создание базы данных Pouchdb no_db_file

К сожалению, когда я пытаюсь создать новую базу данных на CouchDB (я хочу один db для каждого пользователя), я всегда получаю ошибку {"error": "not_found", "reason": "no_db_file"}. Я видел, что это общая ошибка, описанная в документации PouchDB (https://pouchdb.com/guides/databases.html#remote-databases), но CORS включен, и я не могу понять, в чем проблема.

Моя конфигурация CouchDB является: enter image description here

я делаю логин следующим образом:

var user = { 
    name: 'name', 
    password: 'password' 
}; 
var url = "http://ip/"; 
var pouchOpts = { 
    skipSetup: true 
}; 
var ajaxOpts = { 
    ajax: { 
     headers: { 
      Authorization: 'Basic ' + window.btoa(user.name + ':' + user.password) 
     } 
    } 
}; 
var db = new PouchDB(url+'auth', pouchOpts); 

db.login(user.name, user.password, ajaxOpts).then(function() { 
     return db.allDocs(); 
}).then(function(docs) { 

//HERE I TRY TO CREATE THE NEW DATABASE 
pouchDBService.sync(url+"newDatabase", user); 

}).catch(function(error) { 
    console.error(error); 
}); 

И в моем pouchDBService у меня есть:

var database; 

//I call this function as app starts 
this.setDatabase = function(databaseName) { 
    database = new PouchDB(databaseName, { 
     adapter: 'websql' 
    }); 
} 

this.sync = function(remoteDatabase, user) { 
    var remoteDB = new PouchDB(remoteDatabase, { 
     auth: { 
      username: user.name, 
      password: user.password 
     }, 
     skip_setup: true //without this I get the login popup! Why if I'm passing the auth params??? 
    }); 
    remoteDB.info().then(function (info) { 
     console.log(info); 
     database.sync(remoteDB, {live:true, retry: true}) 
    }) 
} 

Есть ли что-то не так? Любая помощь приветствуется.

Благодаря

ответ

0

Для создания базы данных на сервере CouchDB, вы должны быть администратором. Вы можете создать небольшой пользовательский API на сервере для этого (например, с небольшим узлом http-сервера) или использовать плагин couchperuser для CouchDB.

+0

Благодарим за помощь. Я думаю, что couchperuser станет решением моей проблемы. Во всяком случае, я не понимаю, как PouchDB должен работать, поскольку я думаю, что никто не оставит свою базу данных открытой миру. –

+0

PouchDB имеет множество приложений. Сценарий с одной базой данных для каждого пользователя является одним из многих возможных применений. Еще один будет автономным кешем частей базы данных сервера. В этом случае вы просто будете использовать одностороннюю репликацию с сервера на клиент. Или для обмена общедоступными данными вы просто синхронизируете базы данных всех клиентов с одной базой данных сервера. Какими бы ни были ваши требования, существует множество возможных решений. Некоторые из них могут быть решены путем подключения PouchDb к CouchDb, но другие могут быть решены только с помощью третьего уровня, такого как Node API. –