此视图在 PouchDB 中有效,但为什么无法与 CouchDB 同步?
This view works in PouchDB but why does it fail to sync with CouchDB?
在使用 PouchDB 开发应用程序一段时间后,我现在开始第一次尝试与远程 CouchDB 实例同步。现在我只与可安装的 OSX CouchDB 应用程序提供的 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,
});
}
})"
如有指点,不胜感激。
不要使用命名函数。
换句话说,替换为:
map: function titleOnly(doc) {
有了这个:
map: function(doc) {
在使用 PouchDB 开发应用程序一段时间后,我现在开始第一次尝试与远程 CouchDB 实例同步。现在我只与可安装的 OSX CouchDB 应用程序提供的 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,
});
}
})"
如有指点,不胜感激。
不要使用命名函数。
换句话说,替换为:
map: function titleOnly(doc) {
有了这个:
map: function(doc) {