CouchDB:返回错误状态代码的批量文档

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”:“禁止”

我正在将PockDB数据库(带有Angular)与CouchDB数据库同步

当复制正在进行时,代码发出POST请求,对
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错误。看来我必须手动处理身份验证错误。