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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 😀