gpt4 book ai didi

javascript - 处理409冲突文档nodejs nano couchdb

转载 作者:行者123 更新时间:2023-12-03 11:59:09 27 4
gpt4 key购买 nike

我一直在对这个问题进行一些研究,couchdb 给出了太多 document conflicts .

我看到了一个解决方案 Updating a CouchDB document in nano这么说:

  1. 获取文档
  2. 保存_rev
  3. 应用更改
  4. 尝试发送包含已保存 _rev 的更新文档
  5. 如果出现 409,请转到步骤 1

我尝试生成一个函数来执行此操作,直到最后一步:

nano_update = function ( data, id, callback ) {

var db = this;

db.get( id, function( err, doc ) { //Get _rev of the document

if ( !err ) {
for ( var k in data ) {
//Replace defined information while keeping the other
if ( k.toLowerCase() !== '_rev' ) //Do not override _rev
doc[ k ] = data[ k ];
}

return db.insert( doc, id, callback ); //Insert with _rev to update
}
});
}

//Call it
var database = nano.use( 'databaseName' );
nano_update.call( database, { counter: Math.random() }, 'documentName' );

这接近我的预期,但是,如果我打开 2 个窗口连续发出相同的请求,则会达到两个文档冲突的程度,从而导致我的服务器崩溃。

所以,通过说'5。如果出现 409',请转到步骤 1,这是否意味着我必须递归调用同一函数?如果文档继续冲突,肯定会陷入无限循环,我的服务器将再次崩溃。目前,我正在做的是每 5 秒不允许超过 1 个请求,但这在将来效果不佳。

如何在nodejs中使用nano正确处理409冲突的CouchDB文档?

最佳答案

您收到 409 的原因是 _rev 已过时,因为每个文档更新都会更改它。因此,不要紧抓 _rev

如果您需要更新多个文档,请尝试使用 Bulk Document API ,或者您可以使用Partial Update ,这有点像黑客在不指定 _rev 的情况下更新文档(它会自动从数据库读取 _rev)。

关于javascript - 处理409冲突文档nodejs nano couchdb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25479117/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com