Utilizando PostgreSQL com Node.js

Fala galera! Tudo bem com vocês?

Hoje vou falar mais um pouco sobre Node.js, especificamente sobre acesso ao banco de dados PostgreSQL, no post vou mostrar como fazer consultas utilizando procedures e o quão fácil é fazer isso!

Aí você pode falar: “Nossa, mas ninguém usa procedures mais”. 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-pgque é mantido pela empresa SMN e está disponível pra nós no npm.

Então para começar, vamos instalar o SMN-PG usando o seguinte comando:

npm install smn-pg

Feito isso, podemos iniciar a nossa brincadeira. O primeiro passo é configurar 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',
database: 'database',
password: 'pass',
host: 'host',
port: 5432,
max: 10,
idleTimeoutMillis: 30000
};
const pg = require('smn-pg')(config);

view raw
config.js
hosted with ❤ by GitHub

Agora, vamos aos exemplos! Tomando como base, que temos a seguinte procedure em nosso banco de dados:

CREATE OR REPLACE FUNCTION autenticacao.BuscarUsuario(pNome varchar(50), pNomeDaMae varchar(50))
RETURNS TABLE(
"id" integer,
"nome" varchar(50),
"nomeDaMae" varchar(50)
) AS $$
BEGIN
RETURN QUERY
SELECT u.id,
u.nome,
u.nomeDaMae
FROM autenticacao.usuario u
WHERE u.nome ILIKE pNome
AND u.nomeDaMae ILIKE pNomeDaMae;
END;
$$
LANGUAGE plpgsql;

view raw
pgprocedure.sql
hosted with ❤ by GitHub

Podemos executá-la, de quatro maneiras diferentes:

  • Passando os parâmetros na mesma ordem da função;
pg.request()
.input('Rafael') //pNome
.input('Magally') //pNomeDaMae
.execute('autenticacao.BuscarUsuario', (err, data) => {
if (err)
return console.log(err);
console.log(data);
});

  • Passando os parâmetros na mesma ordem da função, porém, de uma única vez:
pg.request()
.inputMany('Jorge' /*pNome*/, 'Maria das Dores' /*pNomeDaMae*/)
.execute('autenticacao.BuscarUsuario', (err, data) => {
if (err)
return console.log(err);
console.log(data);
});

  • Passando os parâmetros com nome e valor;
pg.request()
.input('pNome','Douglas')
.input('pNomeDaMae','Marina')
.execute('autenticacao.BuscarUsuario', (err, data) => {
if (err)
return console.log(err);
console.log(data);
});

  • Passando um objeto composto pelo nome e valor dos parâmetros;
let parameters = {
pNome: 'Maria',
pNomeDaMae: 'Mãe da Maria'
};
pg.request()
.input(parameters)
.execute('autenticacao.BuscarUsuario', (err, data) => {
if (err)
return console.log(err);
console.log(data);
});

  • E com o objeto também podemos passar um prefixo para os nossos parâmetros, como em nosso exemplo, todo parâmetros tem a letra “p” antes, podemos especificar isso na chamada da função, veja no exemplo:
let parameters = {
nome: 'Mateus',
nomeDaMae: 'Neide'
};
pg.request()
.input(parameters, 'p')
.execute('autenticacao.BuscarUsuario', (err, data) => {
if (err)
return console.log(err);
console.log(data);
});

Além do método “execute” também podemos utilizar o método “executeOne”, que é utilizado para retornar apenas um resultado.

O resultado da execução das procedures é o seguinte:
resultado

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-pg.

Por hoje é só, qualquer dúvida ou sugestão, estou à disposição! Até mais 😀

3 thoughts on “Utilizando PostgreSQL com Node.js

  1. edi guerra 28/03/2017 / 10:39

    interessante, eu gostaria de ver usar o banco usando algum orm (sequelize, etc)

    Gostar

    • viniciusmussak 28/03/2017 / 10:52

      Fala Edi! Obrigado pelo feedback e pela sugestão, vou trabalhar em algo do tipo! Abraços 😀

      Gostar

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google photo

Está a comentar usando a sua conta Google Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s