如何重播请求发送到沙发数据库的标头?

时间:2014-05-07 06:13:16

标签: couchdb couchapp couchrest

如何重播作为请求发送到头文件数据库的标头,catch是我想为所有数据库文件执行此操作而不管show函数。

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

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

其中db是我在couch 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?我想这应该是可能的,但无法弄清楚。

非常感谢任何帮助。感谢

2 个答案:

答案 0 :(得分:1)

最后提出了一个解决方案,我们适合我的用例。虽然我丢失了Couch生成的标题作为回应,但我的情况还不错。

更新处理程序,重写URL,显示函数和vhosts组合帮助了我。

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

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

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

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

如果你不能将dbname更改为其他东西,那么问题就更复杂了,如果你把

http://someip:port/dbname?version=1
在vhosts中

并将其指向更新处理程序,然后你无法从Futon UI访问数据库,因为来自Futon UI的get请求将指向更新处理程序并抛出HTTP方法不匹配错误。

要解决此问题,请创建一个重写处理程序,用于指导来自

的请求
someip:port/dbname?version=1

更新处理程序和请求

someip:port/dbname

到show函数,显示从Futon看到的默认视图。

最佳解决方案是,如果您可以自由更改数据库名称,则将URL重定向到数据库设计文档的POST更新处理程序。

答案 1 :(得分:0)

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

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