我试过阅读CouchDB文档,但我发现它在这方面有点模糊(错误,vhost规范)。我在stackoverflow上搜索并阅读了关于"couchdb vhosts“和"couchdb rewrite url”的回复,并尝试应用我能从中获得的建议。仍然坚持这一点,并感谢一些具体的方向,如果有人可以提供它。
我在一个couchDB数据库中有大约1900个文档。每个文档都有一个"type“键。我已经制作了30个设计文档,每个“类型”一个。每个设计文档都有一个名为" all“的视图,它返回该类型文档的所有行。
在下面的信息中,dasvm01.com不是实际的服务器。它位于公司防火墙之后,外部世界无法访问。我一直在尝试使用它,如果我在任何地方出错了,请原谅。
所以,现在我可以在浏览器中执行这样的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设置:我尝试了一下,但我真的没有信心,它似乎不起作用。在福克斯顿,我有:
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上传递多个键:值对,然后将它们重写为一个芒果查询。用户会传递类似如下的内容:
dasvm01.com:5984/registryservice/airplaneidtypes/model/A320/variant/251N将被重写到芒果查询中:
{
"selector": {
"model": "A320",
"variant": {"$eq": "251N"}
},
"fields": [
"_id",
"_rev",
"status",
"model",
"variant",
"variant-type",
"oem",
"historicaloem",
"displaymodel",
"actsmodel"
]
}发布于 2018-04-23 14:48:33
最终,我希望/希望允许用户在
上传递多个键:值对,然后将它们重写为一个芒果查询。用户会传递类似如下的内容:
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请求,并按如下方式进行处理:
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服务器的route parameters,这样您就可以对用户请求进行重新路由。
https://stackoverflow.com/questions/49967972
复制相似问题