Jump to content

MongoDB als Datenbank verwenden


DampflokTV

Recommended Posts

Mit diesem kleinen Tutorial könnt Ihr MongoDB als Datenbank verwenden

Im Hauptordner des Servers folgendes ausführen:

npm install mongoose

Alle folgenden Snippets werden Serverseitig verwendet, z.B. im Ordner "packages/mongo"

index.js

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/dbname', {useNewUrlParser: true});

Jetzt benötigen wir noch ein paar Klassen, z.B. im Unterordner "packages/mongo/Classes"

accounts.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var accountsSchema = new Schema({
    socialClub: String,
    registered: { type: Date, default: Date.now },
    registerIP: String,
    lastIP: String,
    lastConnect: { type: Date, default: Date.now },
    isOnline: Boolean,
    playTime: Number,
    isAdmin: Boolean,
    isSupporter: Boolean,
    isIngameSupporter: Boolean,
    isDeveloper: Boolean,
    isWhitelister: Boolean,
    isCop: Boolean,
    isMedic: Boolean,
    isACLS: Boolean,
    isJustice: Boolean,
    rankCop: Number,
    rankMedic: Number,
    rankACLS: Number,
    rankJustice: Number,
    lastDisconnect: { type: Date, default: Date.now },
});

exports.model = accountsSchema;

Jetzt binden wir diese Klasse in unsere index.js ein:

...

var Schema = mongoose.Schema;
var accounts = require('./classes/accounts.js');
exports.accounts = accounts.model;

Jetzt wollen wir in einem anderen Modul diese Collection nutzen

login.js

var mongoose = require('mongoose');
var db = require('../mongo/index.js');
var accounts = mongoose.model('accounts', db.accounts);

Ok wir haben nun Zugriff auf die Datenbank und das Schema für die Documents

Wir prüfen ob ein Spieler bereits einen Account hat in der login.js, dafür kann "playerReady" oder "playerJoin" verwendet werden, ich prüfe das erst nach dem Download der client_packages:

mp.events.add('playerReady', (player) => {
	accounts.findOne({ 'socialClub': player.socialClub }).then(function (account) {
		if(account)
		{
			// Ja, account gefunden
		}
	});
});

Jetzt werden wir den Account aktualisieren:

	accounts.findOne({ 'socialClub': player.socialClub }).then(function (account) {
		if(account)
		{
			var now = new Date();
			accounts.updateOne(account, { $set: { 'lastConnect': now, 'isOnline': true, 'lastIP': player.ip } });
		}
	});

 

Das geht aber auch noch komfortabler:

	accounts.findOne({ 'socialClub': player.socialClub }).then(function (account) {
		if(account)
		{
			var now = new Date();
			account.lastDisconnect = now;
			isOnline = true;
			playTime = account.playTime + (now - account.lastConnect);
			account.save();
		}
	});

 

Beim Serverstart alle Accounts auf Offline setzen:

accounts.updateMany(
    { 'isOnline': true },
    { $set: { 'isOnline': false } }
);

Sollte kein Account vorhanden sein, legen wir einen an:

function newAccount(player)
{
    var now = new Date();
    var adoc = new accounts({
        'socialClub': player.socialClub,
        'registered': now,
        'registerIP': player.ip,
        'lastIP': player.ip,
        'lastConnect': now,
        'isOnline': true,
        'playTime': 0,
        'isAdmin': false,
        'isSupporter': false,
        'isIngameSupporter': false,
        'isDeveloper': false,
        'isWhitelister': false,
        'isCop': false,
        'isMedic': false,
        'isACLS': false,
        'isJustice': false,
        'rankCop': 0,
        'rankMedic': 0,
        'rankACLS': 0,
        'rankJustice': 0
    });
    adoc.save().then(function(adoc) {
        mp.events.call("loadCharacter", player);
    });
}

 

Ich hoffe das dies euch unterstützt, falls ihr mal mit MongoDB arbeiten wollt.

 

  • Like 7
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...