web-dev-qa-db-de.com

Was ist ein TransientTransactionError in Mongoose (oder MongoDB)?

Ich habe also zwei Dateien. Eine ist server.js und die andere ist db.js. Die db.js-Datei interagiert mit meiner Datenbank mit Mongoose und ich benutze server.js, um Funktionen von db.js aufzurufen.

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}`)
                })
            }
        }
    })
}

Und meine server.js ruft insgesamt drei Funktionen von db.js auf

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

Ich verstehe nicht, warum ich diese Fehlermeldung bekomme:

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)]: {} }

Entschuldigung für die dumme Frage, aber kann mir jemand sagen, was hier passiert? Und was mache ich falsch?

EDIT: Ich habe einen Artikel gefunden, der sich auf dieses Problem bezieht: https://docs.mongodb.com/manual/core/transactions/#retry-transaction Kann aber nichts wirklich verstehen davon.

EDIT 2: Das Problem gefunden. Es war ein Netzwerkproblem, wie MongoNetworkError sagt, und TransientTransactionError verweist auf ein temporäres Problem auf der Datenbankseite. Ich habe das Problem gelöst, indem ich meine IP-Adresse auf der Whitelist listete.

6
Sagnik Pradhan

Hier heißt es MongoNetworkError und TransientTransactionError Diese sagen uns, dass beim Verbinden mit der MongoDB ein Fehler aufgetreten ist .. _ Diese Fehler können folgende Ursachen haben:

1. Ihre Verbindungszeichenfolge ist falsch
2. Ihre IP-Adresse wird nicht in die Whitelist aufgenommen (falls Sie einen Remote-Datenbankdienst verwenden)

Weitere Ressourcen: https://docs.mongodb.com/manual/core/transactions/#retry-transaction

1
Sagnik Pradhan

Was ist ein TransientTransactionError? 

Eine TransientTransactionError ist ein Transaktionsfehler, der als temporär eingestuft wird und bei Wiederholung may erfolgreich ist. 

Wenn Sie von MongoDB unterstützte Treiber verwenden, gibt es zwei mögliche Gründe, warum der Code diesen Fehler anzeigt:

  • Jeder Datenbankbefehlsfehler, der die Fehlerbezeichnung "TransientTransactionError" im Feld "errorLabels" enthält. 
  • Bei jedem Netzwerkfehler ist ein anderer Befehl als commitTransaction in einer Transaktion aufgetreten. 

Das Codebeispiel in MongoDB Transactions: retry-transaction zeigt, wie mit TransientTransactionError verfahren wird. 

5
Wan Bachtiar

Ich hatte ein ähnliches Problem ... Den ganzen Tag konnte ich mich über Mungo verbinden. Dann habe ich angefangen, den 'TransientTransactionError'-Fehler zu erhalten. Ich konnte über Shell eine Verbindung zu MongoDB herstellen, sodass ich wusste, dass der Server wie erwartet betriebsbereit war.

IPv6/localhost. Meine IP wurde von IPv4 auf IPv6 umgestellt. Ich habe das Problem durch Deaktivieren von IPv6 und normaler IPv4-IP behoben. 

BEARBEITEN - anscheinend kann ich dieses Problem zuverlässig wiederherstellen/erstellen, indem ich mich mit 'localhost' verbinde, während meine NIC mit einer IPv6-IP konfiguriert ist. Das Ändern von localhost-> 127.0.0.1 scheint das Problem zu beheben. 

2
terary

Dieser Fehler ist beim Ausführen des Skripts populatedb.js im MDN-Lernprogramm für Express/NodeJS aufgetreten. 

Das Skript suchte nach einer Datenbankverbindung, die mit mongodb:// beginnt, jedoch begann meine Verbindungszeichenfolge aus Mongo mit mongodb+srv://

Ich bearbeitete das Skript stattdessen, um nach dieser Syntax zu suchen, wodurch der Fehler behoben wurde. 

Ich hoffe das hilft jemandem. 

2
Blake Simeon

Ich hatte das gleiche Problem/den gleichen Fehler, allerdings auf einem Windows-Computer. Obwohl ich dachte, ich hätte den mongodb-Dienst gestartet, konnte ich ihn nicht in Windows Services ausführen. Also habe ich den mongoDB-Dienst in Services manuell gestartet und der Fehler ist dann verschwunden. Hoffe das hilft!

2
Benny

Wenn es keine Sicherheitslücke gibt und Sie dies nur zum Herstellen einer Verbindung tun: Während Sie die IP-Whitelist einrichten; Sollte das Format 0.0.0.0/0 sein, wird das Problem nicht auftreten.

enter image description here

Darüber hinaus können wir, wie Sie selbst geantwortet haben, die IP-Adresse hinzufügen, für die wir Zugriff benötigen.

2
Singh Gaurav

Wenn dieser Fehler weiterhin auftritt, liegt ein weiterer Grund darin, dass Sie nach dem Ändern der Konfigurationsdatei vergessen haben, den nodemon-Server neu zu starten. STRG + C und neu starten, so habe ich es gelöst.

1
Marko Filipovic

Für mich kam der vorübergehende Transaktionsfehler immer dann, wenn ich von meinem WLAN-Netzwerk zum Hotspot meines Telefons wechselte. Wenn dies auch Ihnen passiert, besuchen Sie die MongoDB-Website, auf der Sie Ihre Datenbank erstellt und Ihre aktuelle IP-Adresse erneut in die Whitelist aufgenommen haben. Dies wird Ihr Problem lösen.

1
Tarun

Verwenden von mLab - Wenn Ihr Cluster erstellt wird, müssen Sie einen Datenbankbenutzer hinzufügen (auf der Registerkarte Benutzer) und sicherstellen, dass das Kontrollkästchen Make read-only Nicht aktiviert ist. Sobald ich das tat, gingen die Fehler weg. Ich habe die gleichen Fehler wie oben erhalten. Der Datenbankbenutzer kann Ihr Login-Benutzername und Ihr Passwort sein.

1
Jared Stevens

Wechseln Sie zu Ihrem MongoDb Atlas-Dashboard. Klicken Sie auf Netzwerkzugriff, klicken Sie auf IP-Adresse hinzufügen und erlauben Sie die Konnektivität von jeder IP-Adresse. Dies sollte Ihr Problem lösen.

0
AMADI AUSTIN

Ich hatte 

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

Ich habe meine aktuelle IP zu whiteList hinzugefügt, nachdem auf der MongoDB-Website "Cluster/Sicherheit/Whitelist" aufgeführt wurde.

Ich hoffe das hilft. (nicht genug Ruf, um in Kommentaren zu schreiben)

0
gakeko betsi

Wenn Sie MongoDB Atlas verwenden. Sie müssen Ihre IP-Adresse in der Atlas-Konsole in den Sicherheitseinstellungen auf eine Whitelist setzen.

0
HassanK

Sicherheit> Netzwerkzugriff> IP-Adresse hinzufügen> Aktuelle Computer-IP-Adresse hinzufügen. Mein Problem gelöst.

0
tanvirgeek

Ich hatte dieses Problem beim Versuch, meine Heroku-App mit einer MongoDB Atlas-Datenbank zu verbinden.

Wenn Sie ein On-You-Terminal ausführen

heroku logs --tail

Sie könnten sehen

ERROR: { MongoNetworkError: 
connection 4 to cluster0-shard-40-01-qnwp8.mongodb.net:27017 closed
name: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]: {} }`

Nachdem Sie die Serververbindung in MongoDB Atlas auf die Positivliste gesetzt haben, wurde der Datenbankverbindungsfehler behoben.

0
Yvan Pearson