【问题标题】:Pouchdb design view not properly evaluatedPouchdb 设计视图未正确评估
【发布时间】:2015-07-11 22:59:54
【问题描述】:

我正在使用 pouchdb 作为库为tiddlywiki 编写一个小型同步适配器。我已经成功地用 couchdb 尝试过相同的想法,我认为 pouchdb 应该非常相似,但更好。

除了主要设计文档的一个特定视图之外,一切都运行良好。我刚刚复制了我在 couchdb 上使用的视图,效果很好,但是我遇到了一个愚蠢的错误:字段未定义。这显然是定义的!这是我的视图代码:

function (doc) {
        fields = {};
        for(var field in doc.fields ){
            //text should not be included, neither title. We also avoid to send too long fields
         if( ['text','title'].indexOf(field) === -1 && doc.fields[field].length < 1024){
            fields[field] = doc.fields[field];
         }
        }
        fields.revision = doc._rev; //required for proper sync 
    emit(doc._id,fields);
}

如您所见,我要做的第一件事是定义字段。我尝试添加var fields,结果是一样的。这真让我抓狂。如果我想让它起作用,我必须将所有内容加入同一行。我的目标是将此功能外部化为文本文档以便能够轻松编辑它,因此我可以执行以下操作:

var My_view=DoWatheverToGetTheText();
var design_document = {
  '_id': '_design/tw',
  'views': {
    'skinny-tiddlers': {
      'map': My_view
    }}
  };

我试过了,我得到了完全相同的错误。我不希望它被硬编码到我的应用程序中,我希望它是模块化的。我做错了什么?

【问题讨论】:

  • 这在 Firefox 上可以正常工作,所以似乎是 Chrome 的问题。

标签: pouchdb


【解决方案1】:

最后我自己找到了解决方案。

我的做法是,首先将设计文档分成两个文件。一个只有设计文档定义,没有地图功能,但在其位置上有一个空属性。确保此文档是有效的 JSON 非常重要,这是我的问题之一。

{"_id": "_design/TiddlyPouch",
  "views": {
    "someView": {
      "map": ""
    }},
    "filters": {
      "tiddlers" : ""
}
  }

然后我将 map 函数(只是没有名称的函数)写入另一个文件。它看起来像这样:

function(doc){
var fields = {};  
for(var field in doc.fields ){ 
    if( ['text','title'].indexOf(field) === -1){
        fields[field] = doc.fields[field];
    }
}
fields.revision = doc._rev;
emit(doc._id,fields);
 }

为了使它们都适合,我首先评估了设计文档以获得设计对象。然后,我以纯文本的形式获取该函数并加入它,没有任何回车。基本上我把它做成一条线。然后你所要做的就是把纯文本的函数作为 map 属性的值:

stringContainingFunction = functiontext.replace(/\r?\n/,' ');
designDocument.views.someView.map = stringContainingFunction;

之后,我只是将对象推送到 pouchdb,它运行良好。

【讨论】:

    【解决方案2】:

    如您所见,我要做的第一件事是定义字段。

    猜测:您缺少 fields = {}; 的 var 关键字。这将在strict mode 中运行javascript 时导致引用错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多