Back-End

27 fev, 2019

Restify e Sequelize com Node.js – Parte 03

100 visualizações
Publicidade

Dando continuidade à segunda parte desta série, nesta etapa aplicaremos, de fato, o conceito de CRUD: inserir, editar e excluir registros do nosso banco de dados.

Em nosso arquivo “services.js” criaremos três funções novas – todas recebendo como parâmetro um objeto chamado “data”, o qual vai identificar nossa model de pessoas.

Para criar novos registros, utilizaremos o método “create”, e para edição, “update”. Porém, um ponto de atenção: vamos ter que passar um objeto “where” para que seja filtrado um atributo da nossa Model (poderia ser qualquer atributo), mas neste caso, filtraremos pelo “id”.

O mesmo equivale na função para apagar um registro, porém, utilizando o método “destroy”. O objeto where não é obrigatório se você quiser alterar ou apagar todos os registros de uma tabela. Neste momento também é possível “isolar” as funções, capturar possíveis erros e ir tratando com exceções (try/catch);

Os métodos de comunicação que iremos utilizar, serão: post (insert), put (edição) e del (delete). Os códigos podem ser vistos abaixo (caso haja algum erro, retornaremos o código 400):

Para testar nossas funções, não vamos utilizar mais o navegador, pois começamos a enviar estruturas mais complexas de informações. No exemplo, utilizarei o PostMan.

Como a criação do banco, o “id” é auto-number – não há necessidade de enviá-lo no insert – apenas o nome (todas as estruturas que enviaremos no body do postman devem ser baseadas no model que estamos fazendo a requisição, mas nada impede você de mandar uma estrutura diferente e fazer um “map” dos campos).

Para mais informações sobre como trabalhar com os métodos dos models, por exemplo: count(), findById(), filtros mais complexos e queries nativas, verifique a documentação do sequelized.

Tratando os retornos

Até então estamos trabalhando com retornos simples, mas quando falamos em front-end, o ideal seria devolver uma estrutura mais completa com algumas informações mais específicas do que ocorreu na requisição. Pensando nisso, criamos um objeto (json) que retornará se ocorreu algum problema, uma mensagem e os dados da resposta se tiver. Sendo assim, centralizamos uma função chamada retornos e aplicamos na busca de pessoas.

A resposta no postman será a seguinte:

Segurança

Para validar as mensagens que estarão entrando em nosso back-end, criaremos um tratamento de token superficial (bem superficial). Já adianto que o ideal seria adotar o padrão jwt. Criamos, então, um novo arquivo na pasta “config”, chamado “token.js”.

Dentro deste arquivo, criaremos uma única função para validar o “header” de entrada, com um token qualquer, fixo. Se o mesmo for igual ao da requisição enviada, dizemos então que está tudo certo com a mensagem.

No “get” de pessoas enviamos para validação o header, capturado da requisição, que é identificado pela key “token”(poderia ser qualquer nome de sua escolha). Caso esta não seja válida com o que estamos esperamos, retornamos o código 403.

No PostMan, o envio com a key token no header ficará assim:

Paginação:

Nesta etapa trataremos um pouco de performance. Imagine que no seu front-end você tenha uma listagem que exiba todos os resultados de uma busca, mas você apenas mostrará alguns, pois dependendo da quantidade de resultados, isso pode levar muito tempo para retornar ao usuário, pois a quantidade da requisição na rede pesa, como também o “body” do seu front pode demorar para ser renderizado pelo tamanho.

Sendo assim, no Sequelize podemos enviar um skip e limit, para que nosso banco de dados retorne apenas a os resultados a partir de um determinado ponto e uma quantidade limite.

Iremos alterar a nossa busca de pessoas para utilizar o método post e ler o body da requisição, buscando pelo objeto skip e limit. Os mesmos serão enviados para a nossa função de busca.

No método “findAll” passamos ao Sequelize um objeto “offset”, para que se pule uma determinada quantidade de registros e limite em “x” resultados.

Via PostMan, a requisição seria a seguinte:

Bem, finalizo aqui esta série de artigos com exemplos básicos e práticos de como utilizar um pouco do Sequelize, Restify e Node.js. Existem inúmeras formas de utilização destes frameworks, que só têm a agregar ao nosso projeto back-end performance, simplicidade e é claro, aumentar a produtividade do desenvolvimento com mais qualidade, pois até então são tecnologias que estão sendo utilizadas por grandes corporações.

Existem outros frameworks ORM, mas acredito que na questão de recursos, o Sequelize seja o que está inovando mais, pois é possível utilizar vários clients de conexões e há rumores de que está trabalhando com MongoDB, ou seja, se você trabalhar com as funções nativas dele, é possível que você possa futuramente migrar para um banco NoSQL utilizando as mesmas estruturas. Bacana, né?

Espero que tenham gostado. O projeto completo está no meu GitHub. Dúvidas? Deixe nos comentários. Como um futuro bônus iremos reescrever este app para type-script utilizando Node.js.

Até mais!