Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 处理409冲突文档nodejs nano couchdb_Javascript_Node.js_Couchdb_Conflict_Couchdb Nano - Fatal编程技术网

Javascript 处理409冲突文档nodejs nano 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

我一直在做一些关于这个问题的研究,couchdb给了太多

我看到一个解决方案是这样说的:

  • 获取文档
  • 保存_rev
  • 应用更改
  • 尝试使用保存的版本发送更新的文档
  • 如果是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' );
    
    这与我的预期很接近,但是,如果我连续打开两个发出相同请求的窗口,那么这两个文档就会发生冲突,导致服务器崩溃

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


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

    获得409的原因是
    \u rev
    已经过时,因为每次文档更新都会更改它。因此,不要坚持使用
    \u rev

    如果您需要更新多个文档,请尝试使用,或者您可以使用,这有点像黑客攻击,您可以在不指定
    \u rev
    的情况下更新文档(它会自动从数据库读取
    \u rev