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…