2017-08-30 9 views
0

Je gère un serveur CouchDB avec docker et j'essaye de POST des données via une application Node.ESOCKETTIMEDOUT avec télécommande CouchDB

Mais je suis fréquemment invité avec une erreur ESOCKETTIMEDOUT (pas toujours).

est ici la façon dont je suis l'ouverture de la connexion à la DB:

var remoteDB = new PouchDB('http://localhost:5984/dsndatabase', { 
    ajax: { 
    cache: true, 
    timeout: 40000 // I tried a lot of durations 
    } 
}); 

Et voici le code utilisé pour envoyer les données:

exports.sendDatas = function(datas,db, time) { 
    console.log('> Export vers CouchDB') 
    db.bulkDocs(datas).then(function() { 
    return db.allDocs({include_docs: true}); 
    }).then(function(){ 
    var elapsedTime = new Date().getTime() - time; 
    console.log('> Export terminé en ', elapsedTime, ' ms'); 
    }).catch(function (err) { 
    console.log(err); 
    }) 
}; 

L'erreur ne se présente pas à chaque fois mais je suis incapable de trouver un motif. Et, timeout ou non, toutes mes données sont chargées avec succès dans mon CouchDB!

J'ai vu beaucoup de messages sur cette question, mais aucun d'entre eux répond vraiment à ma question ...

Toute idée?

Répondre

0

Ok cela semble être vrai problème: https://github.com/pouchdb/pouchdb/issues/3550#issuecomment-75100690

Je pense que vous pouvez le corriger en indiquant une valeur raisonnable délai d'attente plus/une logique de nouvelle tentative en utilisant backoff exponentielle. Faites-moi savoir si cela fonctionne pour vous.

+0

Aussi, je suis curieux de savoir pourquoi vous appelez 'db.allDocs ({include_docs: true});'. N'est-ce pas lourd? Vous pouvez utiliser l'API de réplication pour envoyer vos documents. Là, le mécanisme de réessai est intégré, j'ai lu. – 82Tuskers

+0

J'ai enlevé le .allDocs() et mis l'option timeout du constructeur à 1 minute ... Il semble fonctionner maintenant ... merci beaucoup – Telliouze

+0

Bienvenue ..:) S'il vous plaît vote upvote la réponse si vous pensez qu'il a aidé tu sors. – 82Tuskers