0

如何重播作为请求发送到沙发数据库的标头,请注意我想为数据库的所有文档执行此操作,而与显示功能无关。

所以我会向沙发数据库发送一个请求以创建一个文档

 curl -X POST -i -H "Content-Type: application/json" -H "User-Agent: CURL" --data-binary          @${INPUTFILE}  http://someip:port/db

其中 db 是我已经在沙发数据库中创建的数据库名称,输入文件是要发送到沙发数据库的 json 文件,该文件将被存储。

这里的响应总是如下

HTTP/1.1 201 Created
Server: CouchDB/1.5.0 (Erlang OTP/R16B01)
Location: http://someip:port/db/14f49d6e537268402761d873560b1da9^M
ETag: "1-ad9ad86f3ca9b8671cd0fcb9e546971f"
Date: Mon, 10 Mar 2014 19:41:07 GMT^M
Content-Type: text/plain; charset=utf-8
Content-Length: 95
Cache-Control: must-revalidate^M

{"ok":true,"id":"14f49d6e537268402761d873560b1da9","rev":"1-ad9ad86f3ca9b8671cd0fcb9e546971f"}

现在我需要在响应中获得一个额外的标题。我知道我们可以通过 showfunctions 轻松地做到这一点,但问题是我必须将 post 请求发送到该 show 函数的 url,如下所示

http://someip:port/db/_design/mydesigndoc/_show/myshowfunction

但我不想要这个,我想知道是否可以发布http://someip:port/db/并获取自定义响应标头?

或者有没有一种方法可以让我在收到请求时将地址前端http://someip:port/db并转发到 ?http://someip:port/db/_design/mydesigndoc/_show/myshowfunction我想这应该是可能的,但无法弄清楚。

任何帮助将不胜感激。谢谢

4

2 回答 2

1

终于想出了一个解决方案,我们适合我的用例。尽管我丢失了 Couch 作为响应生成的标头,但对于我的情况,我可以接受。

更新处理程序、重写 URL、显示功能和虚拟主机组合帮助了我。

正如我的问题陈述中提到的,我想点击的网址是

http://someip:port/dbname?version=1

如果我可以自由地改变这一点,我会用更少的努力解决这个问题。但这是在沙发数据库中创建文档的 POST 请求将命中的 URL。

有两种解决方案,一种是创建不同的 dbname 如果可以这样做,然后将此 URL 重定向到重写中的更新处理程序 URL 或直接使用 vhosts。

如果你不能将 dbname 更改为不同的东西,问题会更复杂,如果你把

http://someip:port/dbname?version=1

在 vhosts 中并将其定向到更新处理程序,那么您将无法从 Futon UI 访问数据库,因为来自 Futon UI 的获取请求将定向到更新处理程序并引发 HTTP 方法不匹配错误。

为了克服这个问题,创建一个重写处理程序来引导来自的请求

someip:port/dbname?version=1

更新处理程序和请求

someip:port/dbname

到一个显示功能,它显示从蒲团看到的默认视图。

最好的解决方案是,如果您有权更改数据库名称,然后将 URL 重定向到数据库设计文档的 POST 更新处理程序。

于 2014-05-09T06:46:09.910 回答
0

也许虚拟主机和/或重写文档会有所帮助:

http://docs.couchdb.org/en/latest/config/http.html#virtual-hosts

于 2014-05-07T12:06:13.073 回答