Como usar um Orm em Node.js

logotipo nó.js

Neste blog Eu falarei sobre um pouco sobre os orms, seus benefícios (prós) e limitações (contras), que é sequelizar e como usá-lo.

Mapeamento de objeto-relacional

é um Técnica para converter dados entre o sistema de programação de tipos de linguagem e banco de dados. Como seu nome indica, isso é endereçado apenas ao banco de dados relacional (SQL). Isso cria um efeito “objeto de banco de dados virtual” no banco de dados relacional, esse efeito é o que nos permite manipular o banco de dados através do código.

Objeto – Referência a / o objeto (s) que podemos usar em Nossa linguagem.

Relacional – Refere-se ao nosso sistema de gerenciador de banco de dados (MySQL, MSSQL, PostgreSQL).

Mapeamento – A referência é referenciada à conexão entre os objetos e as tabelas.

TL; O DR ORM é uma técnica que nos permite fazer perguntas e manipular dados do banco de dados de uma linguagem de programação.

prós

    abstrato: design de uma estrutura ou modelo isolado a partir do banco de dados.

  • portátil: permite transportar a estrutura do seu orm qualquer dbms.
  • aninhamento de dados: No caso de uma tabela tem um ou mais relacionamentos com os outros.

contras

  • lento: se você comparar o tempo de resposta entre uma consulta crua e uma consulta feita de Objetos, a consulta bruta é muito mais rápida porque não há camada (mapeamento).
  • complexidade: Às vezes precisaremos fazer consultas complexas, afortunadamente sequelizar permite que você execute consultas brutas.

que é sequelizar?

sequela é um orm baseado em promessas para o node.js. Suporta PostgreSQL, MySQL, Sqlite e MSSQL e entregar características sólidas de transações, relacionamentos entre tabelas, mecanismos de migração e carregamento de dados, e muito mais.

Porque eu decidi usar seqüelizar?

Sequelize os seus objetos como promessas, algo que anda de mãos dadas com o loop de evento do Node.js.

Agora vou mostrar como criar e migrar tabelas, upload dados e como consulte esses dados. Se você quiser verificar o código, você pode clonar daqui.

requisitos

  • node.js 8.0 +
  • mysql 5.7 +

primeiro instalaremos o módulo sequelize-cli:

 npm i -g seqüelizar-cli 

então Vamos criar uma pasta onde ele contiver nosso aplicativo, vamos criar um arquivo JS e instalaremos seqüelizar e seu dialeto (neste caso MySQL):

 Mkdir Howto -sequelize & & cd howto-seqüelizetouch index.jsnpm init -ynpm i -s sequela mysql2 

agora nós tem que iniciar o projeto com sequelize-cli:

 sequelize init 

sequelizar-cli criou uma estrutura base na raiz do nosso projeto:

Se revisar o arquivo ./config/config.json, vemos que temos 3 opções de conexão para um banco de dados, Vamos modificar a opção “Desenvolvimento”:

 "Desenvolvimento": {"nome de usuário": "raiz", "senha": "tucontraseña", "banco de dados": "HowTo-se seqüérreo", "host": "127.0.0.1", "MySQL" "OperatoraliaSe": Falso, "dialectoptions": {"charset": "utf8mb4"}, "logging": true, "benchmark": true} 

Agora revista o arquivo ./Models/index. Js. Este arquivo tem uma função para criar uma nova instância sequelize cada vez que é chamada, e tem como uma variável de ambiente padrão para “Desenvolvimento”, que usará o banco de dados, host, usuário, senha e opções que acabamos de adicionar.

Nós acreditamos que nosso banco de dados com o seguinte comando:

 seqüelize o db: criar 

muito bom! Agora vamos começar a criar nosso Modelos:

 Sequelize o modelo: Gerar - nome do usuário - Nome do usuário: string, sobrenome: string, alaverdom: string, e-mail: string seqüelize o modelo: gerar - - Nome IdiançaP - Tribute Nome: String Sequiize Modelo: Gerar --Name User_LENGUAJEP - TRIBUTESSUSEROID: INTEGER, Idioma: Integer 

Após a criação de nossos modelos Você tem que fazer o relacionamento entre usuários e idiomas.

./ modelos / user.js

 use rigoroso '; module.exports = (sequelizar, datatipos) =  {var user = seco lize.define ('user', {name: datatypes.string, sobrenome: datatypes.string, alaVerdom: datatypes.string, e-mail: datatypes.string}, {}); User.associate = função (modelos) {// associações podem ser definidos aqui user.belongstoman (modelos.Linguagem, {através de: 'user_lenguajep', como: 'LínguasProgramming', Estrangeiro: 'UserID',}); Voltar usuário;}; 

Vamos analisar isso, vemos que nosso modelo de usuário executa uma função pertence que aponta para o modelo de idioma, em poucas palavras que estamos indicando que um usuário pode pertencer a vários idiomas. Nas opções, através da tabela para a qual você tem que atravessar para encontrar esses relacionamentos, como é opcional, é o nome da propriedade ou chave que nos dará esses relacionamentos, marca estrangeira porque a coluna queremos buscar esses Relacionamentos.

./ modelos / idiomap.js

 'use rigoroso'; module.exports = (sequelizar, datatipos) =   {var lingingp = sequelize.define («idioma», {nome: datatypes.string}, {}); Linguagemp.associate = função (modelos) {// associações pode ser definido aqui a linguagemp.belongstomany (modelos.suario, {através: 'user_lenguajep', como: 'Usuários', Estrangeiro: 'LinguagemPid',}); Devolva o idioma}; 

Fazemos o mesmo com os idiomas (idioma), mas agora apontando para o modelo de usuário.

Vamos lembrar um pouco o que falamos, Orm Funciona em uma camada que é o mapeamento (mapeamento), essas relações só serão realizadas no projeto, precisamos criar uma migração que afeta o banco de dados. Há ORM é que eles revisam se você fizer alterações em seus modelos e criar novas migrações com base nessas alterações (Django ORM, Peewee), em nosso caso sequelizar não tem isso, para criar nossas migrações:

 sequelize migration: gerar - nome - nome de relação-muitos-para-muitos 

Isso gerou um novo arquivo com um esqueleto em nossas migrações, agora temos que modificá-lo :

 'use estrito'; Module.Exports = {UP: (QueryInterface, sequelize) =  {return, {Tipo: 'chave estrangeira', nome: 'fk_usuarioloegajep_usuaro_1', referência: {tabela: 'usuário' Campo: 'id',}, Ondelete: 'sem ação', ONUPDATE: 'sem ação',}), queryinterface.addconstraint ('user_lenguajep' ,, {Tipo: 'chave estrangeira', nome: 'fk_usuariolegegajap_lenguep_1', referências : {Tabela: 'Linguagem', campo: 'ID',}, Ondelete: 'sem ação', ONUPDATE: 'sem ação',}),]}, abaixo: (QueryInterface, sequela) =  {return}}; 

Este arquivo exporta um objeto com 2 propriedades, para cima e para baixo. A propriedade UP é responsável por entregar uma promessa que altera os dados (criar tabelas, relacionamentos, campos, tipos de mudança, etc.), e a propriedade para baixo não, reverter as alterações feitas em UP.

muito bem, agora toca minha parte favorita, você tem que executar os scripts de migração com o seguinte comando:

 seqüelize o db: migrar 

Boom! Mas o que houve?!?! Se lermos cuidadosamente o erro no console, diz que ele não encontra a tabela user_lenguajet no banco de dados, revise as tabelas. Há algo curioso, tudo acaba com um “s”, isto é porque sequelizar-clu gerencia as placas no plural por padrão, mesmo quando em nossas opções temos freezetablename: TRUE, este caso pode ser visto aqui.

Então só precisamos mudar o nome das tabelas um plural em relação a muitos-para-muitos (user_lenguajeps, usuários, linguagem).

Nós desfazer as migrações, mover-se de volta e voilà :
 sequelizar db: migrar: Desfazer: Allsequelize DB: migrar 

As migrações foram bem sucedidas! Agora temos que preencher essas tabelas, seqüelizar-cli usa as sementes (sementes). Vamos criar 3 arquivos de sementes:

 sequelizar sementes: gerar - nome de usuárioEslize sementes: Gerar --Name IdiançaPasca Semente: Gerar --Name user_lenguajap 

Estas sementes estão localizadas na pasta ./seeders, você tem que colocar os dados que Queremos carregar no banco de dados.

semi Todo o usuário:

 'use rigoroso'; Module.Exports = {UP: (QueryInterface, sequela) =  {return QueryInterface.bulkinsert ('Usuários', {}); }, para baixo: (QueryInterface, sequelizar) =  {return Queryinterface.bulkdelete ('Usuários', null, {}); }};  pré> 

Seed Lince:

 'use estrito'; módulo.exports = {UP: (QueryInterface, sequelize) =  {return Queryinterface.bulkinsert («linguagem», {}); }, para baixo: (QueryInterface, sequela) =  {return Queryinterface.bulkdelete («linguagem», null, {}); }};  pré> 

sementes user_lenguajep:

 'use estrito'; Module.Exports = {UP: (QueryInterface, sequelize) =  {return Queryinterface.bulkinsert ('user_lenguajeps' ,, {}); }, Para baixo: (QueryInterface, seqüelize) =  {return QueryInterface.Bulkdelete ('user_lenguajeps, null, {}); }}; 

Agora você precisa carregar esses dados para o banco de dados com o seguinte comando:

 Seqüelizar DB: SEED: Todos 

muito bem! Nós já vimos como inicializar um projeto com sequelizar, criar modelos, atribuir relacionamentos, criar migrações, executar e desfazer migrações, criar sementes e enviá-las para o banco de dados, só precisamos fazer consultas. Vamos para o nosso index.js na raiz e escrevemos a seguinte função:

 const db = requer ('. Modelos'); Const main = assync () =  {tente {Usuários consts = aguardam db.suario.findall ({incluir:}, através de: {atributos:},}],}); Console.log (JSON.Stringify (usuários)); Processo.exit (); } Catch (Erro) {console.log (erro); }}; Main (); 

Nós salvamos e execute o programa (pelo console ou com a ferramenta de depuração do código do Visual Studio e devemos receber um JSON com uma lista de usuários (neste exemplo, há apenas um) Com seus dados e idiomas:

}] 

Aprendemos sequelizar-cli e os princípios da sequela, agora podemos criar uma API que executa ações crud para que nossos clientes consomem!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *