- У нас есть приложение couchbase lite. Мы используем представления для отображения данных в приложении. Существует один дизайн документа, который содержит четыре вида.
- Дизайн документа и представления создаются после того, как база данных готова. Представления создаются только один раз.
Когда мы меняем какой-либо документ или создаем новый документ, который перешел бы в представление, представление прекращает возвращать документы при следующем запросе. Выдает ошибку
{"error": "bad_request", "status": 400, "reason": "Маршрутизатору не удалось направить запрос в do_GET_DesignDocumentcom.couchbase.lite.CouchbaseLiteException: невозможно индексировать представление cceDesignDoc / draftTransactionView: нет блока карты зарегистрирован, Статус: 400 (HTTP 400 bad_request) "}
Представление работает , когда мы используем Couchbase Lite 1.4.0 . не работает , когда мы обновляем до 1.4.4 .
Мы используем представления через REST API, подобные следующим:
http://a638931f -0e15-7389-1ae0-q1f7491ac748: 72e61883-ca1d-8391-ad1e-474299b8c9a3 @ локальный: 5984 / local2368288277 / _design / abcDesignDoc / _view / peterAbcTransactionView 1032 *
Пожалуйста, смотрите соответствующий код ниже:
// This method is called when app starts up. It is called only once.
public createView(){
this.platform.ready().then(() => {
(new Couchbase()).openDatabase(AppUrl.LOCAL_DB_NAME).then(database => {
this.database = database;
let views = {
myAbcTransactionView: {
map: function (doc) {
if (doc.type == "myAbcTransaction") {
emit(doc._id, doc)
}
}.toString()
},
johnAbcTransactionView: {
map: function (doc) {
if (doc.type == "johnAbcTransaction") {
emit(doc._id, doc)
}
}.toString()
},
peterAbcTransactionView: {
map: function (doc) {
if (doc.type == "peterAbcTransaction") {
emit(doc._id, doc)
}
}.toString()
},
jennaAbcTransactionView: {
map: function (doc) {
if (doc.type == "jennaAbcTransaction") {
emit(doc._id, doc)
}
}.toString()
}
};
this.database.createDesignDocument("_design/abcDesignDoc", views);
this.database.listen(change => {
this.listener.emit(change.detail);
});
}
}
//This method is called to show records in the view on the screen
public showRecords() {
this.couchbase.getDatabase().queryView("_design/abcDesignDoc", "peterAbcTransactionView", {}).then((result: any) => {
this.transactions = [];
for (var i = 0; i < result.rows.length; i++) {
this.zone.run(() => {
this.transactions.push(result.rows[i].value);
this.transactions.sort(function (b, a
) {
return a.theDate - b.theDate;
});
});
}
}, error => {
});
}
Информация о версии:
Ионный:
ionic (Ionic CLI): 4.7.1 (AppData \ Roaming \ npm \ node_modules \ ionic)
Ionic Framework: ионно-угловой 3.3.0
@ ionic / app-scripts: 1.3.7
Кордова:
cordova (Cordova CLI): 8.1.2 (cordova-lib@8.1.1)
Платформы Cordova: Android 7.1.4
Плагины Cordova: плагинов в белом списке нет (всего 14 плагинов)
Система:
NodeJS: v6.14.4 (C: \ Program Files \ nodejs \ node.exe)
нпм: 3.10.10
ОС: Windows 10
Couchbase Lite : 1.4.4
Couchbase-Lite-PhoneGap-Plugin : (https://github.com/couchbaselabs/Couchbase-Lite-PhoneGap-Plugin)