No artigo de hoje vamos conhecer o knex, uma biblioteca muito popular e extremamente útil.

O knex é um query-builder ou “construtor de consultas” em tradução livre, para Node.js, e que interage com bancos relacionais.

O knex é capaz de facilitar (e muito) o acesso e interação com o banco de dados relacional da sua aplicação, e por isso, nesse artigo, vamos ver alguns exemplos de como utilizar essa tecnologia.

Criando um projeto

Antes de tudo, precisamos adicionar o knex a um projeto Node já existente com o comando npm install knex .

Além disso, precisaremos fazer a instalação da biblioteca do banco de dados com que queremos que o knex se conecte.

Como vou usar o MySQL neste artigo, usarei o comando npm install mysql, mas se você não quiser utilizar o MySQL não tem problema, é só conferir na documentação do knex todos os bancos disponíveis.

Em seguida, vamos configurar a instância do knex com as credenciais para o acesso ao banco de dados da sua máquina.

Vamos ver um exemplo de configuração usando o MySQL? É só conferir o código abaixo:

const knex = require('knex')({
  client: 'mysql',
  connection: {
    host : '127.0.0.1',
    port : 3306,
    user : 'usuario',
    password : 'senha',
    database : 'meuBancoDeDados'
  }
});

Uma vez que a configuração tenha sido feita, podemos usar o knex para executar alguns comandos. Vamos começar criando uma tabela diretamente em um arquivo. A criação das tabelas utilizando o knex costuma acontecer em migrations, no entanto não iremos abordar esse tema neste artigo.

Criar a tabela

Para a criação da tabela, usaremos o método schema.createTable, que é encadeado à variável knex. Este método recebe como parâmetros o nome da tabela que queremos criar e, em seguida, uma função callback, onde iremos definir os campos da tabela e algumas propriedades deles.

knex.schema.createTable("clientes", function (tabela) {
				//escrutura(campos) da tabela
				tabela.increments("id").primary();
				tabela.string("nome").notNull();
				tabela.string("sobrenome").notNull().defaulfTo("Silva");
			})

Como podemos ver no código acima, adicionamos três colunas adicionando o método TIPO(”Nome da Coluna”) à tabela. Aqui, usamos o tipo string para as colunas nome e sobrenome e o tipo increments, que criará um campo numérico com incremento automático.

Em seguida, definimos mais algumas características dessas colunas: a coluna id, por exemplo, será a chave primária da tabela, enquanto as colunas nome e sobrenome não poderão possuir valores nulos. Na coluna sobrenome ainda foi adicionado um valor padrão, que é Silva.

Inserir dados na tabela

Depois que criarmos a tabela, podemos fazer algumas inserções nela. Assim, precisamos especificar a tabela que queremos alterar e utilizar o método insert, que é responsável por fazer inserções na tabela. Um exemplo de como fazer a inserção de um elemento pode ser vista abaixo:

knex("clientes").insert({
		nome: "Carlos",
		sobrenome: "Almeida",
	});

Assim como podemos inserir um único elemento, podemos inserir vários elementos passando para o método insert um array de objetos:

knex("clientes").insert([
	{
		nome: "Mariana",
		sobrenome: "Souza",
	},{
		nome: "Pedro"
	}//Como o sobrenome não foi especificado, será utilizado o valor padrão anotado na tabela.
]);

Fazer consultas na tabela

As consultas básicas do SQL são feitas com o método select ou seus derivados que combinados podem gerar consultas mais complexas. Já que este artigo é introdutório, iremos ver alguns exemplos abaixo mostrando consultas na tabela que criamos:

knex("clientes").select() //Selecionará todos os campos
knex("clientes").select(["id","nome"])//Selecionará apenas os campos id e nome
knex("clientes").select().first() //Seleciona só o primeiro elemento com todas as colunas
knex("clientes").select().where("id",1)//Seleciona o elemento onde o id é igual a 1
knex("clientes").select().where({nome:"Ana", sobrenome:"Silva"}) //Seleciona todos os elementos que possuirem o nome Ana e o sobrenome Silva

É importante salientar aqui que o assunto de consultas SQL é muito amplo e você pode verificar a seção de consultas da documentação do knex clicando aqui caso tenha interesse em se aprofundar nas consultas.

Excluir dados da tabela

Assim como em queries SQL normais, precisamos tomar muito cuidado com a exclusão de entradas, já que não especificar quais entradas você deseja deletar vai fazer a exclusão do banco de dados inteiro. Alguns exemplos de exclusão podem ser vistos abaixo:

knex("clientes").where("id",1).del()//Deleta o elemento onde o id é igual a 1
knex("clientes").where({sobrenome:"Silva"}).del() //Deleta todos os elementos que possuirem o sobrenome Silva
knex("clientes").whereBetween("id",[10,20]).del() //Deleta os elementos que possuirem o id no intervalo de 10 e 20

Atualizar dados da tabela

A sintaxe de atualização dos dados da tabela requerer o uso de cláusula where assim como a seleção. O método update, responsável pela atualização, recebe como parâmetro um objeto com os dados que devem ser atualizados. Supondo, então, que o objeto {nome:”Carmen”, sobrenome:”Silva”} tenha sido inserido no banco com o id 8, podemos fazer atualizações nesse registro com o código abaixo:

knex('clientes')
  .where("id",8)
  .update({
    sobrenome: "Almeida"
  })

Os campos presentes no objeto passado para a função update serão persistidos no banco de dados, enquanto os dados faltantes não serão alterados.

Considerações finais

Neste artigo vimos a utilização básica de alguns comandos no knex para realizar operações de criação, atualização e exclusão em um banco de dados. No entanto, o knex pode ser utilizado para realizar mais operações já conhecidas do SQL como joins e agrupamentos, que podem ser utilizados em operações mais complexas.

Confira também: