CouchDB 重写规则以更新处理程序导致 405 方法不允许

Posted

技术标签:

【中文标题】CouchDB 重写规则以更新处理程序导致 405 方法不允许【英文标题】:CouchDB Rewrite Rule to Update Handler result in 405 method not allowed 【发布时间】:2016-08-17 12:10:14 【问题描述】:

我有一个奇怪的问题。为了隐藏我的请求 URL 的大部分部分,我在 CouchDB 中为我的视图、列表和更新函数使用了重写规则。尽管更新功能的 URL 很短,但一切正常。如果没有短 URL,我可以毫无问题地调用更新函数,但是如果我使用短 URL,我会得到一个不允许的 405 方法。

有短网址

curl -iX POST -g 'https://[user]:[pw]@[domain]/db_short/update_fields/IndicationSet_1750' -d '"Comment":"Wwow"' -H 'Content-Type: application/json' -H 'Accept: application/json'

HTTP/1.1 405 Method Not Allowed                                                                                                                                                                                                                                            
Server: nginx/1.9.15                                                                                                                                                                                                                                                       
Date: Wed, 17 Aug 2016 11:57:57 GMT                                                                                                                                                                                                                                        
Content-Type: application/json                                                                                                                                                                                                                                             
Content-Length: 75                                                                                                                                                                                                                                                         
Connection: keep-alive                                                                                                                                                                                                                                                     
Cache-Control: must-revalidate                                                                                                                                                                                                                                             
Allow: DELETE,GET,HEAD,PUT

没有短网址

curl -iX POST -g 'https://[user]:[pw]@[domain]/futon/kunde_a/_design/update_indicationset_nuel/_update/update_fields/IndicationSet_1750' -d '"Comment":"Wwowwwww"' -H 'Content-Type: application/json'

HTTP/1.1 201 Created
Server: nginx/1.9.15
Date: Wed, 17 Aug 2016 12:03:47 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 7
Connection: keep-alive
X-Couch-Update-NewRev: 18-6d5bba9e51bf4d28b672776c4bce11d1
X-Couch-Id: IndicationSet_1750
Strict-Transport-Security: max-age=31536000

在我的配置中,我启用了所有必要设置的 cors

cors 凭据:真 标头:接受、授权、内容类型、来源、引用、x-csrf-token 方法:GET、PUT、POST、HEAD、DELETE 来源:*

httpd enable_cors: true

【问题讨论】:

【参考方案1】:

“短网址”不正确。正如documentation 所说,重写 URL 的模式是:

任何 /db/_design/ddoc/_rewrite/path

在你的情况下,这个 URL 应该可以工作:

https://[user]:[pw]@[domain]/db_short/_design/update_indicationset_nuel/_rewrite/update_fields/IndicationSet_1750

【讨论】:

嘿,谢谢您的回复。答案稍微容易一些。我忘记在更新函数的重写规则中添加通配符来处理文档 ID。 好吧,我猜你也在使用虚拟主机配置 (docs.couchdb.org/en/1.6.1/config/http.html#virtual-hosts),如果你能够省略 URL 的“_design/...”部分的话。【参考方案2】:

经过一番挖掘,我发现了问题。我忘记在我的更新函数的重写规则中添加一个通配符来处理查询路径末尾的文档 ID。

旧版本:


       "from": "/update_fields/",
       "to": "/../update_indicationset_nuel/_update/update_fields/",
       "method": "*"
   

新版本:


       "from": "/update_fields/*",
       "to": "/../update_indicationset_nuel/_update/update_fields/*",
       "method": "*"
   

【讨论】:

以上是关于CouchDB 重写规则以更新处理程序导致 405 方法不允许的主要内容,如果未能解决你的问题,请参考以下文章

通过更新处理程序向 couchDB 提交表单不起作用

couchdb/cloudant 更新处理程序未按预期工作

您可以将 CouchDB 的“文档更新处理程序”与复制一起使用吗?

CouchDB 中的短键和唯一键

Erica CouchDB 重写

couchdb 日期格式自动更新