MongoDB

MongoDB ist die führende Open-Source, Document Datenbank die für einfache Entwicklung und Skalierung aber auch für Big Data Szenarien entwickelt wurde.

MongoDB Konsolenchat mit NodeJS und Tailable Cursor

Marc-David Militz
Experte
MongoDB Konsolenchat mit NodeJS und Tailable Cursor

Hier mal ein kleines Beispiel um MongoDB Tailable Cursor mit NodeJS auszuprobieren.
Zum testen genügt eine einfache MongoDB Single Instance (für den Live Betrieb ist das natürlich nicht zu empfehlen).
Bitte beachten: Hierbei handelt es sich um ein Programmierbeispiel, keine ausgereifte Software!

Als erstes benötigen wir eine Capped Collection um den Tailable Cursor nutzen zu können.
Diese erstellen wir mittels der MongoDB Konsole.
use demodb
db.createCollection("chat", { capped : true, size : 5242880 } )


Im zweiten Schritt benötigen wir das entsprechende NodeJS NPM.
Natürlich sollte NodeJS an sich zuerst installiert sein.
Das Beispiel ist jetzt für Windows, aber unter Linux funktiert es im Grunde genauso.
"[Pfad zur NodeJS Installation]\nodejs\node.exe" install mongodb --save


Als nächstes müssen wir ein NodeJS Skript für unseren Chat erstellen.
In diesem definiert man zuerst die benötigten Module und öffnet eine Datenbankverbindung.
// load mongodb libraries
var MongoClient = require('mongodb').MongoClient, assert = require('assert');
// mongodb connection string
var MongoDBConnectionUri = 'mongodb://localhost:27017/demodb';
// define standard input
var stdin = process.openStdin();
// the name of the visitor
var Name = null;

Dann benötigen wir eine Funktion, die für die Datenbankabfrage zuständig ist ...
function QueryChatMessages ()
{
MongoClient.connect(MongoDBConnectionUri, {}, function(err, db)
{
db.collection('chat', function(err, collection)
{
// result stream
cursor = collection.find(
{
'chatid': 1,
},
{
tailable: true,
awaitdata: true,
noCursorTimeout: true
}
)
.stream();

cursor.on('end', function ()
{
db.close();
QueryChatMessages();
});

cursor.on('data', function (chunk)
{
if ( Name != chunk.name )
console.log(chunk.name + ': ' + chunk.message);
});
});
});
}

... und eine Funktion für den Eingabeprompt.
function InputPrompt ()
{
console.log('Gib als erstes deinen Namen ein!');
stdin.addListener('data', function (data)
{
if ( Name == null )
{
Name = data.toString().trim();
console.log('Hallo ' + Name + ', du kannst jetzt chatten!');
}
else
{
MongoClient.connect(MongoDBConnectionUri, {}, function(err, db)
{
assert.equal(null, err);
var chatMessage = {'chatid':1, 'message': data.toString().trim(), 'time': new Date(), 'name': Name};
db.collection('chat').insertOne(chatMessage, function(err, r)
{
assert.equal(null, err);
assert.equal(1, r.insertedCount);
}
);
}
);
}
}
);
}

Als letztes müssen die Funktionen nur noch aufgerufen werden.
QueryChatMessages();
InputPrompt();


Jetzt muss nur noch das Skript an sich aufgerufen werden.
[Pfad zur NodeJS Installation]\nodejs\node.exe [Pfad zum Skript]\mongodb-chatdemo.js


Das Skript lässt sich beliebig oft, auf einem Rechner oder mehreren Rechnern aufrufen. Solange sich alle Skripte auf die gleiche MongoDB Collection verbinden, können die Teilnehmer miteinander chatten.

Die aktuelle NodeJS Version lässt sich hier downloaden
https://nodejs.org/en/download/

Wem das nicht genug ist, für den bietet Qualiero ein entsprechendes Classroom Training für NodeJS Entwickler an
https://www.qualiero.com/lerninhalte/classroom-trainings/mongodb-fuer-nodejs-entwickler-grundkurs.html

Neueste Mitgliederaktivitäten

Diesen Community Beitrag weiterempfehlen