Dans l’exemple précédent, les données Créer une application en temps réel avec Node.js n’ont pas été stockées de manière permanente. Cela signifie qu’à chaque redémarrage du serveur Node.js, les données seront à nouveau vides. Pour pouvoir stocker les données saisies, nous devons utiliser une base de données.
Dans cet article, nous utiliserons la base de données mySQL qui est déjà très connue. Vous pouvez utiliser la même technique si vous utilisez une autre base de données.
Le projet que nous allons créer est la suite du projet sur Créer des applications en temps réel avec Nodes.js. Si vous n’en avez pas encore, suivez l’article.
Étapes pour créer une application en temps réel avec Node.js et MySQL
- Téléchargez et installez MySQL.
- Créez une base de données MySQL à l’aide du script suivant
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' ;
- Une fois que nous avons une base de données MySQL, tout ce dont nous avons besoin ensuite est un pilote qui connecte Node.js avec MySQL. Ouvrez cmd dans le dossier du projet que nous avons créé (« C:\bardimin), puis tapez la commande
npm install mysql
- L’étape suivante consiste à éditer le fichier « server.js ».
- Ensuite, nous ajoutons un script pour la connexion à MySQL dans le fichier server.js
Creating MySQL connection. var sqlCon = mysql.createPool({ host: 'localhost', user: 'root', password: "', database: 'myDatabase', //Change to your database name });
- Lorsque le serveur est lancé pour la première fois, nous devons interroger la table de vote en tant que données initiales et lui attribuer la valeur de la variable « myData ».
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); } }); }); };
- Lorsque l’utilisateur soumet sa candidature, nous effectuons le processus de stockage dans la table de vote et mettons à jour la 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); } }); }); };
- Le script complet du fichier server.js est le suivant :
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"); } }); }) });
Bonne chance…