需要帮助CouchDB重写具有多个参数的视图

时间:2016-04-29 22:26:23

标签: json url-rewriting couchdb vhosts

原始问题低于双栏。 这是一个更新,我希望得到更多的帮助。

嗨,

我终于积极回来了。 在过去的一年里,我曾多次优先考虑这个项目。 我为甚至没有评论你的回答而道歉,这真的给了我希望。

我有一个更清洁的方法,并且我相信取得了一些进展。 我现在在数据库中有大约1900个文档。 每个文档都有一个"类型"键。 我已经制作了30个设计文档,每个"类型#34;每个都有一个名为" all"返回该类型文档的所有行。

所以,现在我可以在浏览器中执行这样的GET:

dasvm01.com:5984/registryservice/_design/airplaneidtypes/_view/all

我的直接目标是将其缩短为:

dasvm01.com:5984/registryservice/airplaneidtypes

dasvm01.com:5984/registryservice/airplaneidtypes/all

为此,我在airplaneidtypes设计文档中添加了一个重写函数:

{
  "_id": "_design/airplaneidtypes",
  "_rev": "11-c28b41a718017cbcd65f82f4acc611cb",
  "views": {
    "all": {
      "map": "function (doc) 
           {  if(doc.ddoc === 'airplaneidtypes') 
               {    emit(doc._rev,doc);  }
           }"
    }
  },
  "language": "javascript",
  "rewrites": [
    {
      "from": "/airplaneidtypes",
      "to": "registryservice/_design/airplaneidtypes/_rewrite",
      "method": "GET"
    }
  ]
}

现在我认为我需要更新CouchDB守护进程:vhosts设置: 我对它采取了一个裂缝,但我真的没有信心,它似乎没有工作/ 在Fauxton,我有:

daemons     
auth_cache {couch_auth_cache, start_link, []}
... 
vhosts {dasvm01.com:5984, /registryservice/_design/airplaneidtypes/_rewrite, []} 

不确定是否:  - 关,   - 离开,   - 不是正确的地方,   - 只需要报价......

你能告诉我什么? 我不理解Fauxton默认值中的符号:

vhosts

    Virtual hosts manager. Provides dynamic add of vhosts without restart, wildcards support and dynamic routing via pattern matching
        [daemons]
            vhosts={couch_httpd_vhost, start_link, []}

=============================================== =================

我正在努力让(任何)重写工作。我在这里和其他网站上看了很多例子。我试图模仿解决方案,但没有成功。某种程度的混乱起作用,因为我在我的观点中传递了两个论点。但基于我在这里看到的例子[10.5.11。 / db / _design / design-doc / _rewrite / path 1这不应该是一个问题。

我有这个观点:

 {"dataProvider": {
  "map": "function(doc) {
    if(doc.dataProvider && doc.status) {
      emit([doc.dataProvider, doc.status], doc); 
      }
    }"
  }
}

当我点击此网址时,视图效果正常:

" // ddpspc28:8080 / data_providers / _design /基本/ _view / dataProvider中键= [" TBC-ACT""不稳定"]"

我想重写一下,以便URL看起来像这样:

" // ddpspc28:8080 / data_providers / dataProvider中键= [" TBC-ACT""不稳定"]"

目前返回:{"错误":" not_found","原因":"缺少"}

为了做到这一点,我创建了一个名为"重写"的字段。在我的设计文档" _design / basic"对于我的数据库" data_providers"。在重写的价值中我有这个:

"[ 
  {  "from":"/dataProvider",
     "to": "_view/dataProvider"  
  }
 ]”

我也试过这个:

“[
  {  "from":"/dataProvider",
     "to": "_design/basic/_view/dataProvider"
  }
]”

我也试过这个:

“[
  {  "from":"dataProvider",
     "to": "/_design/basic/_view/dataProvider"
  }
]”

我怀疑我可能还需要一个"查询"重写的组件,但我很高兴在这一点上只需要重写#34; dataProvider"以及随后的任何内容,并使用完全限定的路径替换dataProvider。

1 个答案:

答案 0 :(得分:0)

_design/basic文档中定义的重写,可在以下位置访问: //ddpspc28:8080/data_providers/_design/basic/_rewrite

因此,您的第一次和最后一次尝试都应该有效,但是可以通过以下方式访问它们: //ddpspc28:8080/data_providers/_design/basic/_rewrite/dataProvider

除非您将它们与virtual hosts合并,否则重写不会非常有用(减少网址大小)。与虚拟主机结合使用可以是集中API的好方法。

我通常会添加一个没有视图的设计文档(称为api),这些视图会重写为其他设计文档'观点等。