Nodejs - Acessando o MySQL

Neste artigo será abordado o acesso ao banco de dados MySQL. O NodeJs não possui um acesso nativo ao banco de dados por este motivo será utilizado um módulo externo.

Qual será a implementação?

Criação de exemplos que abrangem o CRUD.

Configuração

Para iniciar a implementação será necessário a instalação do módulo externo node-mysql.

  • Crie uma pasta para exemplo
  • Abra o terminal / console na pasta criada e digite o comando abaixo.
npm install mysql

Será necessário executar o script para criação da tabela que será utilizada no acesso ao banco de dados.

CREATE DATABASE IF NOT EXISTS `test`;
CREATE TABLE IF NOT EXISTS `test`.`message` (
`id` INT NOT NULL,
`text` VARCHAR(255) NULL,
PRIMARY KEY (`id`));

(C) Create

Representa a criação de um registro na tabela, o comando INSERT do SQL realiza esta operação.

var mysql      = require('mysql');
var connection = mysql.createConnection({});

connection.connect();

connection.query('INSERT INTO `test`.`message` (id, text) VALUES (1, \'Hello\')', function(err, rows, fields) {
  console.log('It works!');
  connection.end();
});

(R) Read

Representa o retorno de dados, o comando SELECT do SQL realiza esta operação.

var mysql      = require('mysql');
var connection = mysql.createConnection({});

connection.connect();

connection.query('SELECT id, text from `test`.`message`', function(err, rows, fields) {
  console.log('It works!');
  connection.end();
});

(U) Update

Representa a atualização de dados, o comando UPDATE do SQL, realiza esta operação.

var mysql      = require('mysql');
var connection = mysql.createConnection({});

connection.connect();

connection.query('UPDATE `test`.`message` set text = text \'123\' where id = 1', function(err, rows, fields) {
  console.log('It works!');
  connection.end();
});

(D) Delete

Representa a exclusão de dados, o comando DELETE do SQL, realiza esta operação.

var mysql      = require('mysql');
var connection = mysql.createConnection({});

connection.connect();

connection.query('DELETE FROM `test`.`message` where id = 1', function(err, rows, fields) {
  console.log('It works!');
  connection.end();
});

Implementação (Final)

connection.js

var util      = require('util');
var mysql      = require('mysql');

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '<<yourpassword>>',
  database : 'test'
});

module.exports = {

	//
	// Conecta com o banco de dados
	//
	openConnection: function openConnection(){
		connection.connect();
	},

	//
	// Executa Query
	//
	runQuery: function runQuery(sql, callback) {
		connection.query(sql, function(err, rows, fields) {
		  if (err){
		  	console.error(sql);
			throw err;
		  }
		
		  callback(err, rows, fields);
		});
	},
	
	//
	// TRUNCATE
	//
	truncateData: function truncateData(callback) {
		var sql = 'TRUNCATE `test`.`message`';
		
		this.runQuery(sql, callback.bind(this));
	},
		
	//
	// CREATE
	//
	createData: function createData(model, callback) {
		var sql = util.format('INSERT INTO `test`.`message` (id, text) VALUES (%s, \'%s\')', model.id, model.text);
		
		this.runQuery(sql, callback.bind(this));
	},
	
	//
	// READ
	//
	readData: function readData(callback) {
		var sql = 'SELECT id, text FROM `test`.`message`';
		
		this.runQuery(sql, callback.bind(this));
	},
	
	
	//
	// UPDATE
	//
	updateData: function updateData(model, callback) {
		var sql = util.format('UPDATE `test`.`message` set text = concat(text, \'123\') where id = %s', model.id);
		
		this.runQuery(sql, callback.bind(this));
	},
	
	//
	// DELETE
	//
	deleteData: function deleteData(model, callback) {
		var sql = util.format('DELETE FROM `test`.`message` where id = %s', model.id);
		
		this.runQuery(sql, callback.bind(this));
	},
	
	//
	// CLOSE CONNECTION
	//
	closeConnection: function closeConnection(model, callback) {
		connection.end();
	}	
};

index.js

var util = require('util');

var connection = require('./connection');
var model = {
	id: 1,
	text: util.format('Hello %s', Math.floor((Math.random() * 100) + 1))
};

connection.openConnection();

connection.truncateData(function(){
	connection.createData(model, function(err, rows, fields){
		
		console.log('1. Criação executada!, (%s) linha(s) afetada(s)!', rows.affectedRows);
		
		connection.updateData(model, function(err, rows, fields){
			console.log('2. Atualização executada!, (%s) linha(s) afetada(s)!', rows.affectedRows);
			
			connection.readData(function(err, rows, fields){
				console.log('3. Leitura executada!', JSON.stringify(rows));
				
				connection.deleteData(model, function(err, rows, fields){
					console.log('4. Exclusão executada, (%s) linha(s) afetada(s)!', rows.affectedRows);
					
					connection.closeConnection();
				});
			});
		});
	});
});

Código Fonte: GitHub

Execução!

Digite o comando abaixo na pasta do projeto para execução!

node index.js

Fim!

Prontos para acessar o banco de dados MySQL ?
Até a próxima.

Recomendações