我如何才能重放作为请求发送到couch db的头,catch是我想为数据库的所有文档做这件事,而不管显示函数。
所以我将发送一个请求给db创建一个文档作为
curl -X POST -i -H "Content-Type: application/json" -H "User-Agent: CURL" --data-binary @${INPUTFILE} http://someip:port/db
其中db是我已经在couch 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轻松地做到这一点,但这里的问题是,我必须向该show函数的url发送post请求,如下所示
http://someip:port/db/_design/mydesigndoc/_show/myshowfunction
但我不想这样,我想知道是否有可能只是发布到http://someip:port/db/
并获得自定义响应头回来?
或者有一种方法,我可以前端地址到http://someip:port/db
和转发它到http://someip:port/db/_design/mydesigndoc/_show/myshowfunction
当我收到一个请求?我想这应该是可能的,但我想不出来。
任何帮助都将非常感激。由于
最后想出了一个解决方案,我们适合我的用例。虽然我丢失了Couch在响应中生成的头,但对于我的情况,我可以接受。
更新处理程序,重写URL,显示功能和vhosts组合帮助了我。
正如我的问题声明中提到的,我想要访问的url是
http://someip:port/dbname?version=1
如果我有改变这一点的自由,我会用更少的努力解决这个问题。但是,这个URL将被POST请求击中,用于在数据库中创建文档。
有两种解决方案,一种是创建不同的dbname,如果可以的话,在重写时将此URL重定向到更新处理程序URL,或者直接使用vhosts。
如果您不能将dbname更改为其他内容,如果您将
更改为 ,问题会更复杂http://someip:port/dbname?version=1
在vhosts中直接指向update处理程序,那么你不能从Futon UI访问db,因为从Futon UI获取请求会直接指向update处理程序,并且会抛出HTTP方法不匹配错误。
为了克服这个问题,创建一个重写处理程序来指导来自 的请求。someip:port/dbname?version=1
更新处理程序,请求到达
someip:port/dbname
到show函数,显示从Futon看到的默认视图。
最好的解决方案是,如果你有改变数据库名称的自由,然后将URL重定向到数据库设计文档的更新处理程序的POST。
也许虚拟主机和/或重写文档会有所帮助:
http://docs.couchdb.org/en/latest/config/http.html虚拟主机