Это представление работает в PouchDB, но почему оно не синхронизируется с CouchDB? - PullRequest
1 голос
/ 11 июня 2019

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

Документы синхронизируются нормально, но у меня проблемы с определенным видом. Я проверил, что это действительно JS и не вижу ошибки.

Я храню каждое представление в своем собственном проектном документе, который, как я прочитал, является лучшей практикой.

Пока я пробовал:

  • Удаление toLowerCase() (на самом деле нет причин, просто чтобы проверить)
  • Перемещение испускаемого значения в собственную переменную

У других людей были проблемы с синхронизацией представлений из-за использования современных функций JS, но я считаю, что я написал свой с ES5, который я прочитал, это то, что требуется.

Вот код определения вида:

const ddoc = {
  _id: '_design/title-only',
  views: {
    'title-only': {
      map: function titleOnly(doc) {
        if (doc.type && doc.type === 'song' && doc.title) {
          emit(doc.title.toLowerCase(), {
            id: doc._id,
            title: doc.title,
            authors: doc.authors,
            starred: doc.starred || false,
            labels: doc.labels || [],
            createdAt: doc.createdAt,
          });
        }
      }.toString(),
    },
  }
};

Я получаю сообщение об ошибке типа "compilation_error".

Вот сообщение об ошибке:

"Compilation of the map function in the 'title-only' view failed: Expression does not eval to a function. (function titleOnly(doc) {
                                if (doc.type && doc.type === 'song' && doc.title) {
                                    emit(doc.title.toLowerCase(), {
                                        id: doc._id,
                                        title: doc.title,
                                        authors: doc.authors,
                                        starred: doc.starred || false,
                                        labels: doc.labels || [],
                                        createdAt: doc.createdAt,
                                    });
                                }
                            })"

Любые указатели с благодарностью получены, спасибо.

1 Ответ

0 голосов
/ 12 июня 2019

Не используйте именованную функцию.

Другими словами, замените это:

map: function titleOnly(doc) {

на это:

map: function(doc) {
...