Sign in to follow this  
DampflokTV

MongoDB als Datenbank verwenden

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 5

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.