Url rewriting CouchDB vhosts和URL重写多个参数

Url rewriting CouchDB vhosts和URL重写多个参数,url-rewriting,couchdb,vhosts,couchdb-mango,fauxton,Url Rewriting,Couchdb,Vhosts,Couchdb Mango,Fauxton,我试着阅读CouchDB文档,但我发现它在这方面有点模糊(FAUXTON,vhost规范)。我已经在stackoverflow上搜索并阅读了“couchdb vhosts”和“couchdb重写url”的回复,并尝试应用我可以在那里找到的建议。仍然坚持这一点,如果有人能提供具体的指导,我们将不胜感激 我在couchDB数据库中有大约1900个文档。每个文档都有一个“类型”键。我已经制作了30个设计文档,每个“类型”一个。每个设计文档都有一个名为“all”的视图,该视图返回该类型文档的所有行 在下

我试着阅读CouchDB文档,但我发现它在这方面有点模糊(FAUXTON,vhost规范)。我已经在stackoverflow上搜索并阅读了“couchdb vhosts”和“couchdb重写url”的回复,并尝试应用我可以在那里找到的建议。仍然坚持这一点,如果有人能提供具体的指导,我们将不胜感激

我在couchDB数据库中有大约1900个文档。每个文档都有一个“类型”键。我已经制作了30个设计文档,每个“类型”一个。每个设计文档都有一个名为“all”的视图,该视图返回该类型文档的所有行

在下面的信息中,dasvm01.com不是实际的服务器。它位于公司防火墙后面,外部世界无法访问。我一直在尝试使用它,如果我在任何地方出错,请原谅我

因此,现在我可以从浏览器中执行如下GET:

dasvm01.com:5984/registryservice/_design/airplaneidtypes/_view/all
我的近期目标是将其缩短为:

dasvm01.com:5984/registryservice/airplaneidtypes

为此,我在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设置:我尝试了一下,但是我真的没有信心,而且它似乎不起作用。在福斯顿,我有:

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, []}
最终,我希望/希望允许用户在URL上传递多个键:值对,然后将它们重写为MANGO查询。用户将传递如下内容:

dasvm01.com:5984/registryservice/airplaneidtypes/model/A320/variant/251N
app.get('/registryservice/:typeId/model/:modelId/variant/:variantId', (req, res)=>{

  // Now you have acess to req.params object
  // You can use them as you wish:

  mango_query = {
      "selector": {
          "model": `${req.params.modelId}`,
          "variant": {"$eq": `${req.params.variantId}`}
      },
      "fields": [
          "_id",
          "_rev",
          // ...
      ]
  }
  // You can communicate with CouchDB by making HTTP requests
  // to CouchDB server which is running (for example) on 127.0.0.1 and listening
  // on port 5984

  // For sending HTTP requests, you might use `node-fetch` package
})
这将被重写到MANGO查询中:

    {
    "selector": {
        "model": "A320",
        "variant": {"$eq": "251N"}
    },
    "fields": [
        "_id",
        "_rev",
        "status",
        "model",
        "variant",
        "variant-type",
        "oem",
        "historicaloem",
        "displaymodel",
        "actsmodel"
    ]
}
最终,我希望/希望允许用户传递多个key:value 然后将它们重写为MANGO查询。用户 我会通过这样的程序:

dasvm01.com:5984/registryservice/airplaneidtypes/model/A320/variant/251N
app.get('/registryservice/:typeId/model/:modelId/variant/:variantId', (req, res)=>{

  // Now you have acess to req.params object
  // You can use them as you wish:

  mango_query = {
      "selector": {
          "model": `${req.params.modelId}`,
          "variant": {"$eq": `${req.params.variantId}`}
      },
      "fields": [
          "_id",
          "_rev",
          // ...
      ]
  }
  // You can communicate with CouchDB by making HTTP requests
  // to CouchDB server which is running (for example) on 127.0.0.1 and listening
  // on port 5984

  // For sending HTTP requests, you might use `node-fetch` package
})
dasvm01.com:5984/registryservice/airplaneidtypes/model/A320/variant/251N

我不确定您使用的是哪种服务器端技术,但在NodeJS/ExpressJS的情况下,您可以这样做:


用户从浏览器向ExpressJS服务器发送以下GET请求:

GET /registryservice/airplaneidtypes/model/A320/variant/251N
运行在
dasvm01.com
上并侦听(例如)端口
8080
的ExpressJS接收GET请求,并按如下方式处理:

dasvm01.com:5984/registryservice/airplaneidtypes/model/A320/variant/251N
app.get('/registryservice/:typeId/model/:modelId/variant/:variantId', (req, res)=>{

  // Now you have acess to req.params object
  // You can use them as you wish:

  mango_query = {
      "selector": {
          "model": `${req.params.modelId}`,
          "variant": {"$eq": `${req.params.variantId}`}
      },
      "fields": [
          "_id",
          "_rev",
          // ...
      ]
  }
  // You can communicate with CouchDB by making HTTP requests
  // to CouchDB server which is running (for example) on 127.0.0.1 and listening
  // on port 5984

  // For sending HTTP requests, you might use `node-fetch` package
})

基本上,上面的想法是使用ExpressJS服务器,以便可以重新路由用户请求