Couchbase получает нулевой канал

Я использую последний сервер Couchbase с Sync Gateway. В клиентском приложении swift я нажимаю такой документ:

 let userChannel = "\(self.login)"
    config.channels = [userChannel, "zzzz", "nurse1"]
       config.replicatorType = .pushAndPull
    _pushPullRepl = Replicator.init(config: config)
  _pushPullRepl?.start()

На сервере я получаю этот документ, но проблема в том, что

   "channels": [
        null
      ]

Поэтому, когда я пытаюсь вытащить документ по каналу, я получаю 0 документов.

У меня есть файл конфигурации здесь:

     {
"log": ["*"],
"adminInterface": ":4985",
"databases": {
  "dev": {
    "num_index_replicas": 0,
      "server":"http://localhost:8091",
      "bucket": "dev",
       "username": "admin",
       "password": "adminadmin",
      "users": { 
      "admin": { "disabled": false, "password": "adminadmin"},
      "nurse2": { "disabled": false, "password": "adminadmin", "admin_channels": ["nurse2", "_nurse2","nurse1", "_nurse1"]},
      "nurse1": { "disabled": false, "password": "adminadmin", "admin_channels": ["nurse1", "_nurse1", "nurse2", "_nurse2"] }
    }
  }

}

}

Спасибо за ваши ответы.

Редактировать:

Функция синхронизации есть

 "sync":
        `function(doc) {channel(doc.channels);}`
      }

и я получаю ошибку

2019-02-25 18: 07: 14.234729+0100 CouchbaseliteTest [2474: 1149779] Ошибка синхронизации Couchbaselite: {push #1} функция'

у меня больше нет ошибки, но канал по-прежнему нулевой на сервере :(


person tamtoum1987    schedule 25.02.2019    source источник
comment
Где у вас функция синхронизации? Без него вы никогда не поместите документы в каналы   -  person borrrden    schedule 26.02.2019
comment
ах, это точно то, чего мне не хватает   -  person tamtoum1987    schedule 26.02.2019
comment
я просто добавляю синхронизацию: function(doc) {channel(doc.channels); и я получаю сообщение об ошибке 2019-02-25 18:07:14.234729+0100 CouchbaseLiteTest[2474:1149779] CouchbaseLite Sync ERROR: {Push#1} Got error response to rev -YFzAmAK0VWolQcrIv2DiWH 1-a82becb9eacf1c02d7f7f99: (#6fdafd0514aeb7f99): 500 «Исключение в функции синхронизации JS»   -  person tamtoum1987    schedule 26.02.2019


Ответы (1)


Я нашел решение, которое я подключал к Nurse1 и Nurse2, поэтому я должен добавить function(doc) {channel(doc.channels);} к этим пользователям, как это

     "users": { 
      "admin": { "disabled": false, "password": "adminadmin"},
      "nurse2": { "disabled": false, "password": "adminadmin","sync":
        `function(doc) {channel(doc.channels);}`, "admin_channels": ["nurse2", "_nurse2","nurse1", "_nurse1"]},
      "nurse1": { "disabled": false, "password": "adminadmin","sync":
        `function(doc) {channel(doc.channels);}`, "admin_channels": ["nurse1", "_nurse1", "nurse2", "_nurse2"] }
    }

Также мне пришлось добавить канал в документ, прежде чем сохранить его так

      let channels = MutableArrayObject()
            channels.addString("nurse1")
            mutableDoc.setArray(channels, forKey: "channels")

_________РЕДАКТИРОВАТЬ

функция синхронизации на уровне пользователя не требуется.

person tamtoum1987    schedule 26.02.2019
comment
Это не хорошо. Это неподходящее место для функции синхронизации. Это должно быть на уровне базы данных, а не на уровне пользователя. Причина, по которой это работает, заключается в том, что это функция синхронизации по умолчанию, которую вы использовали, и поэтому после добавления каналов на стороне клиента она будет работать, но это не связано с функцией синхронизации, которую вы туда добавили. Это выдаст ошибку в будущей версии. - person borrrden; 27.02.2019
comment
вы правы, я только что удалил синхронизацию на уровне пользователя, и она все еще работает - person tamtoum1987; 27.02.2019
comment
@ tamtoum1987 Не могли бы вы исправить свой ответ, а затем принять его, чтобы другие могли извлечь пользу из вашего опыта? - person G. Blake Meike; 17.04.2019