web-dev-qa-db-fra.com

Qu'est-ce qu'une TransientTransactionError dans Mongoose (ou MongoDB)?

Donc, j'ai deux fichiers. L'un est server.js et l'autre est db.js. Le fichier db.js interagit avec ma base de données à l'aide de Mongoose et j'utilise server.js pour appeler des fonctions à partir de db.js

db.js :
var mongoose = require('mongoose');
mongoose.connect('', { useNewUrlParser: true })
var Schema = mongoose.Schema;

module.exports = function () {
    var db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    return db.once('open', function() {
        console.log("Connected to DB")
        var postschema = new Schema({
            title: String,
            intro: String,
            body: String,
            author: String,
            timestamp: { type: Date, default: Date.now }
        });

        var post = mongoose.model('post', postschema);

        return {
            newPost(title, intro, body, author) {
                var newpost = new post({
                    title: title,
                    intro: intro,
                    body: body,
                    author: author
                })
            },
            getPostsAll() {
                post.find({}, function (err, res) {
                    return (`Error:${err} Posts:${res}`)
                })
            }
        }
    })
}

Et mon server.js appelle trois fonctions en tout de db.js qui sont

var DB = require('./db.js')
var db = DB()
db.getPostsAll()
db.newPost()

Je ne comprends pas pourquoi je reçois cette erreur:

connection error: { MongoNetworkError: connection 4 to black-test-shard-00-01-ewyaf.mongodb.net:27017 closed
at TLSSocket.<anonymous> (E:\HTML\black-box\node_modules\mongodb-core\lib\connection\connection.js:276:9)
at Object.onceWrapper (events.js:272:13)
at TLSSocket.emit (events.js:185:15)
at _handle.close (net.js:541:12)
at TCP.done [as _onclose] (_tls_wrap.js:379:7)
  name: 'MongoNetworkError',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]: {} }

Désolé pour la question idiote, mais quelqu'un peut-il me dire ce qui se passe ici? Et qu'est-ce que je fais mal?

EDIT: J'ai trouvé un article relatif à ce problème: https://docs.mongodb.com/manual/core/transactions/#retry-transaction Mais je ne peux rien inventer de cela.

EDIT 2: Trouvé le problème. C'était un problème de réseau car il est écrit MongoNetworkError et je suppose que TransientTransactionError fait référence à un problème temporaire lié à la base de données. Je l'ai résolu en liste blanche mon adresse IP.

6
Sagnik Pradhan

MongoNetworkError et TransientTransactionError Ceci nous indique qu'il y a eu une erreur lors de la connexion à MongoDB . Ces erreurs peuvent survenir pour les raisons suivantes:

1. Votre chaîne de connexion est incorrecte
2. Votre adresse IP n'est pas sur liste blanche (Si vous utilisez un service de base de données à distance)

Ressources supplémentaires: https://docs.mongodb.com/manual/core/transactions/#retry-transaction

1
Sagnik Pradhan

Qu'est-ce qu'une TransientTransactionError? 

TransientTransactionError est une erreur transactionnelle classée comme temporaire et, si elle est relancée peut réussir. 

Si vous utilisez Pilotes pris en charge par MongoDB , il existe deux raisons possibles pour que le code obtienne cette erreur:

  • Toute erreur de commande de base de données incluant le libellé d'erreur "TransientTransactionError" dans le champ "errorLabels". 
  • Toute erreur réseau rencontrée lors de l’exécution d’une commande autre que commitTransaction dans une transaction. 

L'exemple de code dans Transactions MongoDB: relance-transaction show explique comment gérer TransientTransactionError

5
Wan Bachtiar

J'ai eu un problème similaire ... .__ Toute la journée, j'ai pu me connecter via mangouste. Puis j'ai commencé à avoir l'erreur 'TransientTransactionError'. Je pouvais me connecter à mongoDB via Shell pour que je sache que le serveur était opérationnel comme prévu.

IPv6/localhost. Mon IP est passé d'IPv4 à IPv6. J'ai résolu le problème en désactivant IPv6 et en obtenant une adresse IP IPv4 normale. 

EDIT - il semble que je puisse re/créer ce problème de manière fiable en me connectant à 'localhost' alors que mon NIC est configuré avec un IPv6 IP Changer de localhost-> 127.0.0.1 semble résoudre le problème. 

2
terary

J'ai rencontré cette erreur lors de l'exécution du script populatedb.js dans le didacticiel MDN pour Express/NodeJS. 

Le script cherchait une connexion à une base de données commençant par mongodb://, mais ma chaîne de connexion de mongo a commencé par mongodb+srv://

J'ai édité le script pour vérifier cette syntaxe à la place, ce qui a résolu l'erreur. 

J'espère que ça aidera quelqu'un. 

2
Blake Simeon

J'ai eu le même problème/erreur, mais sur une machine Windows. Même si je pensais avoir démarré le service Mongodb, je ne l'avais pas vu s'exécuter dans les services Windows. J'ai donc démarré manuellement le service mongoDB dans Services, puis l'erreur a disparu. J'espère que cela t'aides!

2
Benny

J'ai eu 

  'MongoNetworkError',
  errorLabels: [ 'TransientTransactionError' ],
  [Symbol(mongoErrorContextSymbol)]:

J'ai ajouté mon adresse IP actuelle à la liste blanche après "clusters/security/whitelist" sur le site Web MongoDB.

J'espère que ça aide. (pas assez de réputation pour écrire dans les commentaires)

0
gakeko betsi