Node.js - Apresentando e usando o Sequelize (acesso ao Mysql)

 Neste artigo eu vou apresentar o Sequelize e mostrar como usar esse ORM para acessar um banco de dados MySql.

Se você esta chegando agora sugiro que leia os seguintes artigos onde apresento os conceitos sobre o Node js:

Os pré-requisitos para acompanhar o artigo são:

Para saber mais sobre o editor VS Code leia os seguintes artigos :

Apresentando o Sequelize

O Sequelize é um ORM(Object/Relational Mapper) baseado em Promise para Node.js e io.js, e suporta os dialetos PostgreSQL, MySQL, MariaDB, SQLite e MSSQL e recursos a transação, relacionamentos, replicação de leitura e muito mais.

Ele possui um mecanismo de migração muito poderoso que pode transformar um esquema existente de banco de dados em uma nova versão e também fornece mecanismos de sincronização de banco de dados que podem criar estrutura de banco de dados especificando a estrutura do modelo.

O Sequelize esta disponível via NPM e sua instalação pode ser feita executando o comando no Node.js:  npm install --save sequelize

A seguir você deve instalar instalar o conector para o banco de dados que você deseja acessar usando o Sequelize, e, isso pode ser feito executando os comandos abaixo:

$ npm install --save pg pg-hstore
$ npm install --save mysql                // para os dialetos mysql e mariadb
$ npm install --save sqlite3
$ npm install --save tedious             // para o SQL Server

Criando o schema MySql

Vamos agora mostrar na prática como usar o Sequelize para acessar um banco de dados MySQL.

Para isso eu vou criar um novo schema no MySQL usando o MySQL Workbench conforme os passos a seguir:

Passo 1

- Abra o MySQL WorkBench e clique no ícone para criar um novo schema: (ou clique com o botão direito do mouse sobre a área Schemas e a seguir em Create Schema)

Passo 2

-  A seguir informe o nome do schema, eu usei o nome mac_demo, e clique no botão Apply;

Passo 3

-  Na próxima janela clique em Apply e a seguir em Finish;

Ao final você deverá ver na área SCHEMAS do MySql WorkBench o schema mac_demo criado e pronto para ser usado:

Criando a aplicação Node e instalando o Sequelize

Neste momento você já deve ter o Node.js e o NPM instalados para poder continuar.

Crie uma pasta na sua máquina local onde será criada a nossa aplicação Node e onde vamos instalar o Sequelize e os pacotes necessários.

Para isso abra uma janela de prompt de comando clicando no ícone do Windows e a seguir em Prompt de Comando digitando cmd ou command na barra de tarefas. (Eu estou usando o Windows 10)

Com a janela de comandos aberta digite os comandos:

Vamos iniciar nossa aplicação criando o arquivo package.json que será usado para definir os pacotes que iremos usar em nossa aplicação.

Digite no prompt e comando :  npm init -y   (se você não usar o -y terá que responder algumas perguntas relacionadas ao projeto)

Será criado o arquivo package.json e seu conteúdo será exibido a seguir conforme mostra a figura.

Vamos agora instalar o Sequelize digitando o seguinte comando : npm install --save sequelize  (o --save salva no arquivo package.json a dependência ao sequelize.)

Agora vamos instalar o Connector para o MySql digitando o seguinte comando :  npm install --save mysql   (o --save salva no arquivo package.json a dependência ao conector MySql.)

Abrindo o arquivo package.json podemos ver as dependências do mysql e do sequelize informadas. Isso é importante pois com base apenas na informação deste arquivo podemos gerar todas as dependências usando o NPM através do comando : npm install

Pronto ! Já temos o Sequelize e o conector para o MySQL instalados em nossa aplicação agora vamos primeiro estabelecer uma conexão e testar se estamos conseguindo acessar o schema mac_demo criado.

Usando o VS Code e criando a arquivo app.js da aplicação

Vamos agora usar o editor VS Code para poder criar o arquivo app.js na pasta sequelize_demo da nossa aplicação.

Abra o VS Code e no menu File clique na opção Open Folder

Selecione a pasta sequelize_demo que criamos para o nosso projeto.

Você deve visualizar apenas a pasta node_modules que foi criada no projeto e que contém todos os arquivos de dependências necessários para a execução da nossa aplicação.

Deverá ver também o arquivo package.json.

Clique no ícone New File para criar um novo arquivo no projeto e informe o nome app.js:

A seguir digite o código abaixo no arquivo app.js :

Vamos entender o código :

Neste código a primeira coisa que eu fiz foi importar um módulo sequelize usando require('sequelize').  Assim Sequelize representa uma variável de referência ao Sequelize.

Não precisamos importar nada referente ao conector com o banco de dados usado pois o Sequelize cuida disso.

A seguir criamos uma nova instância do Sequelize usando o seu construtor que possui a seguinte sintaxe:

new Sequelize(database, [username=null], [password=null], [options={}])

onde :

  1. database é o nome do schema do banco de dados que vamos acessar. No nosso exemplo usamos o schema mac_demo criado no MySQL;
  2. username é o nome do usuário de acesso ao MySQL, no exemplo estou usando o usuário root;
  3. password é senha do usuário root. Para o exemplo estou usando a senha do usuário root;

Para mais detalhes veja a documentação em : http://sequelize.readthedocs.io/en/latest/api/sequelize/

A seguir estou usando o parâmetro authenticate que retorna uma Promise para verificar a conexão com o banco de dados mac_demo do MysQL:

Nota: Promise é um objeto usado para processamento assíncrono. Um Promise (de "promessa") representa um valor que pode estar disponível agora, no futuro ou nunca.

    var conexao = connection.authenticate()
    .then(function(){
       console.log('Conexão com o MySQL foi estabelecida com sucesso');
    })
    .catch(function (err) {
      console.log('Não foi possível se conectar com o banco de dados MySql');
    })
    .done();

Agora  vamos rodar a nossa aplicação,  digitando ::  node app.js 

Observe a mensagem indicando que a conexão foi estabelecida com sucesso.

Muito bem...

Agora vamos criar uma tabela chamada Artigos neste schema e definir dois campos : titulo e assunto

Depois vamos incluir um registro na tabela e para concluir vamos exibir o registro incluido.

Para isso vamos alterar o código do arquivo app.js conforme mostrado a seguir:

Entendendo o código:

Usamos o método define para definir mapeamentos entre um modelo e uma tabela.

Com esse método o Sequelize irá automaticamente adicionar os atributos createdAt e updatedAt e assim, você será capaz de saber quando foi a entrada no banco de dados e quando ele foi atualizado a última vez. (Em outro artigo vou mostrar como inibir esse recurso)

var Artigos = connection.define('artigos', {
        titulo: Sequelize.STRING,
        assunto : Sequelize.TEXT
});

Assim o método define irá criar a tabela Artigos contendo os campos :

Para saber mais detalhes sobre  os tipos de dados consulte aqui http://docs.sequelizejs.com/en/latest/api/datatypes/

Depois disso estamos usando o método sync() para sincronizar os modelos para o banco de dados com a tabela e usando o método create() para incluir um registro nos campos titulo e assunto.  (sync() retorna uma Promise)

connection.sync().then(function () {
    Artigos.create({
       titulo: 'Usando Sequelize',
       assunto: 'Neste artigo vamos abordar como usar os recursos do Sequelize'
    })
});

Finalmente estamos usando o método findAll() para listar todos os registros da tabela artigos.

connection.sync().then(function () {
       Artigos.findAll().then(function(artigos) {
         console.log(artigos.dataValues)
     });
});

Para testar basta digitar o comando : node app.js

Você também pode executar o comando no VS Code. Para isso pressione  CTRL+SHIFT+'  para abrir a janela de comandos e digite : node app

Como vemos temos o registro incluído e exibido no console. Para constatar vamos abrir o MySQL WorkBench e verificar a tabela e os seus dados:

Observe que por padrão os campos createdAt e updateAt foram criados e atualizados.

O registro esta duplicado porque eu executei duas vezes o comando :  node app.js

E assim, nesse primeiro contato com o Sequelize, já acessamos um banco de dados MySQL , criamos uma tabela e inserimos um registro.

Nada mal...

Aguarde mais novidades sobre o Sequelize.

Referências:


José Carlos Macoratti