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.
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
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:
Das Codebeispiel in MongoDB Transactions: retry-transaction zeigt, wie mit TransientTransactionError
verfahren wird.
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.
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.
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!
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.
Darüber hinaus können wir, wie Sie selbst geantwortet haben, die IP-Adresse hinzufügen, für die wir Zugriff benötigen.
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.
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.
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.
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.
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)
Wenn Sie MongoDB Atlas verwenden. Sie müssen Ihre IP-Adresse in der Atlas-Konsole in den Sicherheitseinstellungen auf eine Whitelist setzen.
Sicherheit> Netzwerkzugriff> IP-Adresse hinzufügen> Aktuelle Computer-IP-Adresse hinzufügen. Mein Problem gelöst.
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.