Crie aplicativos em tempo real com Node.js e MySQL

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

  1. Baixe e instale o MySQL.
  2. 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'
;
  1. 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
  1. A próxima etapa é editar o arquivo “server.js”.
  2. 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
});
  1. 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);
            }
        });
    });
};
  1. 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);
            }
        });
    });
};
  1. 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…

ARTIGOS RELACIONADOS

Últimos artigos