E aí galera! Tudo certo?
Hoje vou falar mais um pouco sobre Node.js, especificamente sobre acesso ao banco de dados SQL Server, basicamente, como no post anterior, sobre o uso do PostgreSQL vou demonstrar como consultar o banco através de Stored Procedures.
E já parafraseando o post anterior, repito a minha colocação, caso você pense que ninguém mais utiliza procedures: “Aí que você se engana, muita gente ainda utiliza esse poderoso recurso do banco de dados, e é por isso que surgiu esse conteúdo!”
Para fazer o acesso ao banco, vamos utilizar um pacote chamado smn-sql, que é mantido pela empresa SMN e está disponível pra nós no npm.
O smn-sql não é um mero “chamador de procedures”, ele também tem várias outras utilidades, dentre elas:
- Utilização de parâmetros Input;
- Utilização de parâmetros Output/Return;
- Controle de transação;
- Utilização e criação de tipos “Table”;
Então para começar, vamos instalar o SMN-SQL utilizando o seguinte comando:
npm install smn-sql
Feito isso, podemos iniciar a nossa brincadeira. O primeiro passo é preencher o objeto de configuração com o banco de dados para posteriormente utilizarmos na requisição do pacote, como no exemplo a seguir:
let config = { | |
user: 'username', | |
password: 'senha', | |
server: 'servidor', | |
database: 'database', | |
options: { | |
encrypt: true //Caso esteja utilizando o SQL no Azure, utilize este parâmetro 🙂 | |
} | |
}; | |
const sql = require("smn-sql")(config); |
Agora, vamos aos exemplos! Tomando como base, que temos a seguinte procedure em nosso banco de dados:
CREATE PROCEDURE BuscarUsuario | |
@Nome varchar(50), | |
@NomeDaMae varchar(50) | |
AS | |
BEGIN | |
SELECT u.Id, | |
u.Nome, | |
u.NomeDaMae | |
FROM Usuario u | |
WHERE u.Nome LIKE @Nome | |
AND u.NomeDaMae LIKE @NomeDaMae | |
END | |
GO |
Podemos executá-la com o seguinte comando:
sql.request() | |
.input('Nome', 'Gustavo') | |
.input('NomeDaMae', 'Joana') | |
.execute('BuscarUsuario', (err, recordset) => { | |
if(err) | |
return console.log(err); | |
console.log(recordset); | |
}); |
E caso quisermos utilizar transação, podemos fazer da seguinte maneira:
let transaction = sql.transaction(); | |
transaction.begin((err) = > { | |
if(err) | |
return console.log(err); | |
sql.request(transaction) | |
.input('Nome', 'Gustavo') | |
.input('NomeDaMae', 'Joana') | |
.execute('BuscarUsuario', (err, recordset) => { | |
//Se acontecer algum erro, ROLLBACK na transaction | |
if(err) { | |
transaction.rollback(() => { | |
console.log(err); | |
}); | |
//Caso contrário, COMMIT | |
} else { | |
transaction.commit(() => { | |
console.log(recordset); | |
}); | |
} | |
}); | |
}) |
O resultado das procedures é o seguinte:
O resultado da consulta pode ser recuperado utilizando “recordset[0]”, que é a primeira posição de um array de informações sobre a consulta.
Fácil, não?
O código do pacote está disponível para sugestões, alterações e melhorias no GitHub, em: https://github.com/smn-official/smn-sql
Por hoje é só, qualquer dúvida ou sugestão, estou à disposição! Até mais 😀