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 4

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.