Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
commonjs mit mongodb verbinden
#1
Wink 
Hallo Liebe Community,

nun ich lerne gerade JavaScript und möchte gerne eine mongodb-Datenbank mit meinen Projekt verbinden.
Ich habe Docker verwendet um eine MongoDB zu erstellen. Weiterhin wurde VS Code und Atlas verlinkt und ich kann manuell auf die Datenbank zufgreifen und die Collections "characters" sehen.


Hier ist der Code, der nicht funktioniert:

Code:
const MongoClient = require('mongodb').MongoClient;
const connectingstring = 'mongodb://localhost/database';

MongoClient.connect(connectingstring, (err, db) => {
    if (err) {
        console.log('Database wurde nicht verbunden!');
        process.exit(1);
    }
    console.log('Datenbank ist verbunden');
    const characters = db.collection('characters');
    console.log(characters.name);
    db.close();
});

Wenn ich mein Script unter nodejs aufführe, erwarte ich eigentlich ein console.log() ausdruck, was nicht kommt. Mein Terminal befindet sich in eine Endlosschleife. Wenn ich das Objekt "MongoClient.connect()" eine Variable zuweise und mir mit console.log() anzeigen lasse, erhalte ich ein Promise mit dem Attribut "pending".

Es wäre nett, wenn mir einer hier helfen würde.

viele Grüße
Poolgate
Zitieren
#2
Hallo Poolgate und willkommen im Forum!

Hier:
https://stackoverflow.com/questions/7537...responding
hat jemand das selbe Problem und die Erklärung, warum es nicht funktioniert, ist diese:
Zitat:Callback Support has been removed from v5 hence the console.log statements in callback function are not getting printed
Lösung indem Du, wie in der ersten Antwort beschrieben, mit async - await arbeitest.

Offenbar ist hier die Doku, ich habe in diese gesehen:
https://mongodb.github.io/node-mongodb-n...lient.html
nicht aktuell.
Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
(Andrι Gide (1869-1951), frz. Schriftst., 1947 Nobelpreis)
Zitieren
#3
Ich habe es gefunden:

Code:
const MongoClient = require('mongodb').MongoClient;
const connectingstring = 'mongodb://localhost/database';

MongoClient.connect(connectingstring)
.then(function(err, db) {
    if (err) {
        console.log('Database wurde nicht verbunden!');
        process.exit(1);
    }
    console.log('Datenbank ist verbunden');
    db.close();
 )}
.catch(function(err) {
    console.log(err);
}

(30.12.2023, 18:26)Sempervivum schrieb: Hallo Poolgate und willkommen im Forum!

Hier:
https://stackoverflow.com/questions/7537...responding
hat jemand das selbe Problem und die Erklärung, warum es nicht funktioniert, ist diese:
Zitat:Callback Support has been removed from v5 hence the console.log statements in callback function are not getting printed
Lösung indem Du, wie in der ersten Antwort beschrieben, mit async - await arbeitest.

Offenbar ist hier die Doku, ich habe in diese gesehen:
https://mongodb.github.io/node-mongodb-n...lient.html
nicht aktuell.

Hi Sempervivum,

Danke dir und ich hab vorher im Github und in die Doku reingesehen. Nun ich muss augrund der asynchronität mein Result mit ein Promise abfangen. Dies habe ich dann mal gemacht mit .then() Methode. Es funktioniert. 

Viele Grüße
Poolgate
Zitieren
#4
Oh, das hat sich jetzt überkreuzt.
Selbstverständlich kannst Du auch mit "then" arbeiten aber ich würde in Betracht ziehen, besser async - await zu verwenden, weil mit mit "then" die Strukturen immer verschachtelter werden können, wenn es komplexer wird.
Ich habe selbst die Erfahrung mit Sqlite gemacht: Mit "then" begonnen und dabei geblieben, aber ich bereue es jetzt, denn durch die Verschachtelungen ist der Code ganz schön unübersichtlich geworden.
Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
(Andrι Gide (1869-1951), frz. Schriftst., 1947 Nobelpreis)
Zitieren
#5
Würdest du die db-verbindung async halten oder dich auf die darauffolgende CRUD Befehle auf  die JSON-Collections konzentrieren ?

Ich bin gerade am Überlegen, warum ich hier ein Promise starten muss, denn die Datenbank fährt einmal mit dem nodejs server hoch und bleibt solange on bis der Server heruntergefahren wird.

Ich probiere auf jeden Fall async/await nachher aus. Mischen möchte ich nicht.
Zitieren
#6
Ganz genau weiß ich es nicht, aber ich hatte bei Sqlite den Eindruck, dass so ziemlich alles asynchron und mit Promises arbeitet. Scheint bei Mongo-DB ähnlich zu sein.
Aber Datenbank-Sachen sind nicht meine Stärke, vielleicht meldet sich da noch jemand mit erweiterten Kenntnissen.
Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
(Andrι Gide (1869-1951), frz. Schriftst., 1947 Nobelpreis)
Zitieren
#7
Ich habe nochmals nachgelesen und es auch in der Doku gefunden. Mongo ist wie mysql aufgebaut und benötigt immer ein Promise. Wenn du willst, kann ich meine Findings posten
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen:
2 Gast/Gäste