Echtzeitanwendungen mit Node.js und MySQL erstellen

Im vorigen Beispiel wurden die Daten der Echtzeitanwendung mit Node.js nicht dauerhaft gespeichert. Das bedeutet, dass jedes Mal, wenn wir den Node.js-Server neu starten, die Daten wieder leer sein werden. Um die eingegebenen Daten speichern zu können, müssen wir eine Datenbank verwenden.

In diesem Artikel werden wir die mySQL-Datenbank verwenden, die bereits recht bekannt ist. Die gleiche Technik können Sie verwenden, wenn Sie eine andere Datenbank verwenden.

Das Projekt, das wir erstellen werden, ist eine Fortsetzung des Projekts zu Echtzeitanwendungen mit Nodes.js erstellen. Wenn Sie noch kein Projekt haben, folgen Sie bitte dem Artikel.

Schritte zur Erstellung einer Echtzeitanwendung mit Node.js und MySQL

  1. MySQL herunterladen und installieren.
  2. Erstellen Sie eine MySQL-Datenbank mit folgendem Skript
CREATE TABLE 'voting' (
  'id' INTEGER(11) NOT NULL AUTO_INCREMENT,
  'name' VARCHAR(12) COLLATE utf8mb4_general_ci NOT NULL,
  'time' DATETIME NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY USING BTREE ('id')
) ENGINE=InnoDB
AUTO_INCREMENT=1 ROW_FORMAT=DYNAMIC CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci'
;
  1. Sobald wir eine MySQL-Datenbank haben, brauchen wir nur noch einen Treiber, der Node.js mit MySQL verbindet. Öffnen Sie cmd in dem von uns erstellten Projektordner („C:\bardimin) und geben Sie den Befehl
npm install mysql
  1. Der nächste Schritt ist die Bearbeitung der Datei „server.js“.
  2. Als nächstes fügen wir ein Skript für die Verbindung zu MySQL in der Datei server.js hinzu
Creating MySQL connection.
var sqlCon = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: "',
    database: 'myDatabase', //Change to your database name
});
  1. Wenn der Server zum ersten Mal gestartet wird, müssen wir die Abstimmungstabelle als Ausgangsdaten abfragen und den Wert der Variablen „myData“ zuweisen.
Create initial data
var initData = function (_callback) {
    sqlCon.getConnection(function (err, connection) {
        if (err) {
            _callback (false)
        }
        connection.query('SELECT 'name', COUNT('name') AS 'total' FROM 'voting' GROUP BY 'name' ORDER BY 'name'', function (error, result) {
            connection.release();
            if (!error) {
                myData.akbar = result [0] .total;
                myData.goldie = result [1] .total;
                _callback (true);
            }
            if (error) {
                _callback (false);
            }
        });
    });
};
  1. Und wenn der Benutzer abschickt, führen wir den Speichervorgang in der Abstimmungstabelle durch und aktualisieren die Variable „myData“.
var addData = function (data, _callback) {
    sqlCon.getConnection(function (err, connection) {
        if (err) {
            _callback (false)
        }
        connection.query('INSERT INTO voting SET name= ?', [data] , function (error) {
            connection.release();
            if (!error) {
                if (data === "akbar") {
                    myData.akbar++;
                }
                if (data === "goldie") {
                    myData.goldie++;
                }
                _callback (true);
            }
            if (error) {
                _callback (false);
            }
        });
    });
};
  1. Das vollständige Skript der Datei server.js lautet wie folgt:
var app = require("express")();
var http = require('http'). Server(app);
var io = require("socket.io")(http);
var mysql = require("mysql");

Listening port
http.listen(3000, function () {
    console.log("Listening on 3000");
});

html file
app.get("/", function (req, res) {
    res.sendFile(__dirname + '/index.html');
});

Creating MySQL connection.
var sqlCon = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: "',
    database: 'yii2.socket', //Change to your database name
});

Global Variable
var myData = {akbar: 0, goldie: 0};
var isInitData = false;

Create initial data
var initData = function (_callback) {
    sqlCon.getConnection(function (err, connection) {
        if (err) {
            _callback (false)
        }
        connection.query('SELECT 'name', COUNT('name') AS 'total' FROM 'voting' GROUP BY 'name' ORDER BY 'name'', function (error, result) {
            connection.release();
            if (!error) {
                myData.akbar = result [0] .total;
                myData.goldie = result [1] .total;
                _callback (true);
            }
            if (error) {
                _callback (false);
            }
        });
    });
};

var addData = function (data, _callback) {
    sqlCon.getConnection(function (err, connection) {
        if (err) {
            _callback (false)
        }
        connection.query('INSERT INTO voting SET name= ?', [data] , function (error) {
            connection.release();
            if (!error) {
                if (data === "akbar") {
                    myData.akbar++;
                }
                if (data === "goldie") {
                    myData.goldie++;
                }
                _callback (true);
            }
            if (error) {
                _callback (false);
            }
        });
    });
};

This is auto initiated event when Client connects to Your Machien.
io.on("connection", (socket) => {
    console.log("A user is connected");

if (!isInitData) {
        initData(function (res) {
            if (res) {
                socket.emit('newData', myData);
                isInitData = true;
            } else {
                console.log("Initial data error");
            }
        });
    } else {
        socket.emit('newData', myData);
    }

socket.on('addData', (data) => {
        addData(data, function (res) {
            if (res) {
                io.emit('newData', myData);
                console.log("Add new data success");
            } else {
                console.log("Add new data error");
            }

});
    })
});

Viel Glück…

VERWANDTE ARTIKEL

Neueste Artikel