No exemplo anterior, os dados do Criando um aplicativo em tempo real com o Node.js não foram armazenados permanentemente. Isso significa que toda vez que reiniciarmos o servidor Node.js, os dados ficarão vazios novamente. Para poder armazenar os dados inseridos, precisamos usar um banco de dados.
Neste artigo, usaremos o banco de dados mySQL, que já é bastante famoso. Você pode usar a mesma técnica se usar outro banco de dados.
O projeto que criaremos é uma continuação do projeto sobre Criação de aplicativos em tempo real com Nodes.js. Se você ainda não tem um, siga o artigo.
Etapas para criar um aplicativo em tempo real com Node.js e MySQL
- Baixe e instale o MySQL.
- Crie um banco de dados MySQL como o seguinte script
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' ;
- Depois que tivermos um banco de dados MySQL, tudo o que precisamos é de um driver que conecte o Node.js ao MySQL. Abra o cmd na pasta do projeto que criamos (“C:\bardimin) e digite o comando
npm install mysql
- A próxima etapa é editar o arquivo “server.js”.
- Em seguida, adicionamos um script para a conexão com o MySQL no arquivo server.js
Creating MySQL connection. var sqlCon = mysql.createPool({ host: 'localhost', user: 'root', password: "', database: 'myDatabase', //Change to your database name });
- Quando o servidor é executado pela primeira vez, precisamos consultar a tabela de votação como os dados iniciais e atribuir o valor da variável “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); } }); }); };
- E quando o usuário envia, fazemos o processo de armazenamento na tabela de votação e atualizamos a variável “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); } }); }); };
- O script completo do arquivo server.js é o seguinte:
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"); } }); }) });
Boa sorte…