Поиск направления на ошибку pouchdb
error:"unauthorized"
id:"_design/db"
message:"You are not a db or server admin."
name:"unauthorized"
ok:true
reason:"You are not a db or server admin."
rev:"137-81fe83389359c1cfb50bf928f3558b81"
status:500
Pouchdb пытается выдвинуть проектный документ после полной деинсталляции / переустановки приложения (поэтому локальный pouchdb должен был быть удален). Я предполагаю, что это где-то в потоке изменений. Но странная часть в том, что couchdb находится на ревизии 133, а не на 137.
Как это исправить? Я попробовал компакт, но это не сработало. Единственный очевидный ответ, который я могу придумать, - вручную внести изменения в дизайн на диване, чтобы он был новее 137.
Я запустил поиск в потоке изменений, используя этот код
var http=require('http');
var url = "http:/server/db/_changes?style=all_docs";
http.get(url, function(res){
var body = '';
res.on('data', function(chunk){
body += chunk;
});
res.on('end', function(){
var test = JSON.parse(body);
test.results.forEach(function(item,index){
if (item.id==="_design/db"){
console.log(item);
}
});
});
}).on('error', function(e){
console.log("Got an error: ", e);
});
И получил 1 результат, вер 133, правильный. Так откуда же взялся pouchdb?
- Редактирование Удаление базы данных пакетов, по-видимому, исправит ее до следующей установки приложения.
2 ответа
Код ошибки 500
который на основании документации:
500 - внутренняя ошибка сервера
Запрос был недействительным, либо потому что предоставленный JSON был недействительным, либо неверная информация была предоставлена как часть запроса.
Кроме того, сообщение об ошибке и причина указывают, что:
сообщение:"Вы не администратор БД или сервера."
причина:"Вы не администратор БД или сервера".
Я думаю, что ошибка может быть вызвана администратором базы данных и разрешениями участника. Поскольку обычные пользователи / роли членов базы данных не могут создавать документы разработки PUT, только пользователи / роли администратора базы данных могут создавать документы разработки PUT:
Вы упомянули, что:
Это действительно просто потому, что у телефона есть какая-то будущая версия дизайн-документа...
Если есть проблема с пересмотром, должно быть получено 409 - Conflict
ошибка НЕ 500 - Internal Server Error
,
Я не уверен, просто идея.
Получается, что теперь Android использует диск Google для создания резервных копий indexdb. Это приводило к тому, что установленная версия приложения продолжала получать будущую версию документа после отката базы данных во время тестирования. Единственный способ обойти это, я нашел это сделать.
.on('denied', function (result) {
if (result.doc.error === "unauthorized" && result.doc.id === "_design/db") {
//catastrophic failure
var DBDeleteRequest = window.indexedDB.deleteDatabase("_pouch_");
DBDeleteRequest.onerror = function (event) {
console.error("Error deleting database.");
throw new Error("Error deleting database.");
};
DBDeleteRequest.onsuccess = function (event) {
console.log("Database deleted successfully");
window.location.reload(); //reload the app after purge
};
}
}
Даже pouchdb.destroy не сможет полностью решить проблему. Это что-то вроде ядерного решения с орбиты.