CouchDB:返回错误状态代码的批量文档
我正在将PockDB数据库(带有Angular)与CouchDB数据库同步 当复制正在进行时,代码发出POST请求,对CouchDB:返回错误状态代码的批量文档,couchdb,pouchdb,couchdb-futon,Couchdb,Pouchdb,Couchdb Futon,我正在将PockDB数据库(带有Angular)与CouchDB数据库同步 当复制正在进行时,代码发出POST请求,对http://127.0.0.1:5984/testdb/_bulk_docs 我对数据库有一个拒绝未经授权的写入的验证规则,它会生成一个禁止的错误。因此,服务器正在以JSON响应响应作为[{“id”:“0951db944e729c981ad3964c22002d55”,“rev”:“8-ccdcb52743cae43c5870113f09f2e25a”,“error”:“禁止”
http://127.0.0.1:5984/testdb/_bulk_docs
我对数据库有一个拒绝未经授权的写入的验证规则,它会生成一个禁止的错误。因此,服务器正在以JSON响应响应作为[{“id”:“0951db944e729c981ad3964c22002d55”,“rev”:“8-ccdcb52743cae43c5870113f09f2e25a”,“error”:“禁止”,“原因”:“未授权”}]
根据,上述响应应生成417预期失败
状态代码。但是,它当前会生成一个201创建的
状态代码
由于响应代码不正确,客户端(PockDB)显示为所有记录已同步,但更新不会写入服务器(CouchDB)
是否有可更改此状态代码的配置选项
在参考之前,我的validate\u doc\u update
功能如下所示
function(newDoc, oldDoc, userCtx){
if (!userCtx) throw({forbidden: 'Need a user to update'});
if((userCtx.roles.indexOf('_admin') == -1) && (userCtx.roles.indexOf('backend:manager') == -1)){
throw({forbidden: "Not Authorized"});
}
}
417:expectation failed
状态代码仅在all\u或\u nothing
参数设置为true时有效。默认情况下,此参数为false
couchdb中默认的批量更新事务模式是,它保证只保存部分文档。如果文档未保存,api将返回一个错误对象,就像您处理了一个事实上已成功保存的文档列表一样。因此,201
似乎是正确的回答
然后,您必须遍历响应,找到失败的文档并手动更新它们
在all\u或\u nothing
模式下,只有在所有文档都已更新的情况下,才会返回成功
同步时,您还可以使用具有批量更新所不具备的许多其他功能的端点 看来你是对的。我认为如果至少有一条记录无法同步,就会出现417错误。看来我必须手动处理身份验证错误。