Javascript 处理409冲突文档nodejs nano couchdb
我一直在做一些关于这个问题的研究,couchdb给了太多 我看到一个解决方案是这样说的:Javascript 处理409冲突文档nodejs nano couchdb,javascript,node.js,couchdb,conflict,couchdb-nano,Javascript,Node.js,Couchdb,Conflict,Couchdb Nano,我一直在做一些关于这个问题的研究,couchdb给了太多 我看到一个解决方案是这样说的: 获取文档 保存_rev 应用更改 尝试使用保存的版本发送更新的文档 如果是409,请转至步骤1 我试着生成一个函数来实现它,直到最后一步: nano_update = function ( data, id, callback ) { var db = this; db.get( id, function( err, doc ) { //Get _rev of the document
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' );
这与我的预期很接近,但是,如果我连续打开两个发出相同请求的窗口,那么这两个文档就会发生冲突,导致服务器崩溃
所以,通过说'5。转到步骤1如果是409',这是否意味着我必须递归调用同一个函数?如果文档继续冲突,肯定会出现无限循环,我的服务器将再次崩溃。目前,我所做的是每5秒不允许超过1个请求,但这在将来不会很好
如何在nodejs中使用nano正确处理409个冲突的CouchDB文档?获得409的原因是
\u rev
已经过时,因为每次文档更新都会更改它。因此,不要坚持使用\u rev
如果您需要更新多个文档,请尝试使用,或者您可以使用,这有点像黑客攻击,您可以在不指定\u rev
的情况下更新文档(它会自动从数据库读取\u rev
)