Por que você deveria estudar Nest.js?

Tales Marinho
4 min readSep 29, 2020

--

Não é Next.js. É Nest.js, um framework de desenvolvimento web que é uma das tecnologias que mais gostei de conhecer em 2020. Eu gosto muito de trabalhar criando webservices com expressjs, porém o problema de trabalhar com várias linguagens e frameworks é que você sempre vai sentir falta de algo que existia naquela outra tecnologia. No meu caso, eu sentia falta de criar APIS REST de um modo parecido com o que eu criava com Java EE e de trabalhar com banco de dados de forma parecida com o que eu trabalhava com Active Record.

O que é o Nest.js?

De acordo com a documentação oficial , Nest.js é um framework node.js progressivo feito para criar aplicações de backend eficientes, escaláveis e confiáveis.

A progressive Node.js framework for building efficient, reliable and scalable server-side applications.

O Nest.js foi criado por Kamil Mysliwiec e já tem mais de 30 mil estrelas no github. Para ter uma ideia do tamanho atual do framework, o expressjs, que já é um framework mais antigo e, inclusive, é usado pelo Nest.js, tem 50mil estrelas.

A documentação nos traz diferentes formas de estruturar a aplicação com Nest. Apis Rest, microserviços, Graphql, Websockets, Standalone entre outras. É um framework muito versátil.

Por que eu gostei tanto de Nest.js?

Para mim, o grande diferencial do Nest é a meta programação. O Nest.js foi criado com Typescript, o que permite o uso de um recurso relativamente novo do Javascript, chamado de decorators( Annotations para quem veio do Java). Um dos meus objetivos para o ano que vem será dominar a api do reflect-metadata.

A seguir, um exemplo de serviço rest criado com Nest.

No código acima podemos ver algumas coisas interessantes:

  1. Definição do controller na classe pai, em localhost a chamada a qualquer endpoint dessa classe terá o prefixo ‘/cats’.
  2. O decorator Get() nos diz que esse método aceitará o método HTTP do tipo Get.
  3. Por default, será retornado um JSON com status da requisição 200.
  4. Existe uma injeção de dependência no construtor da classe para injetar a classe AppService.

Se você já trabalhou com Angular 2+ ou com Java EE, a explicação de código acima pode ser bastante óbvia e desnecessária. Na verdade, é um código tão simples que é possível que seja óbvia se você já tem alguma experiência com programação.

Trabalhando com banco de dados

Recentemente, antes de conhecer o Nest.js, eu optei por usar Ruby on Rails em um projeto, afinal eu ainda não conhecia nenhuma solução de nodejs que me agradasse ao trabalhar com banco de dados. Com MongDB e Mongoose era legal, mas com Typescript ainda era um pouco confuso. Com bancos relacionais, ainda não encontrei nada que se equipare ao Active Record do ruby, porém Typeorm me agradou bastante e talvez seja o que eu vinha procurando. Veja a seguir alguns exemplos de mapeamento de objetos do banco com Mongoose e com Typeorm.

Novamente, para quem veio do Java EE, esse formato de definição de objetos do banco com entities ou schemas é bem mais legível. Uma vez criados, schemas e entities podem ser injetados no seus services, como nos exemplos a seguir:

Ao realizar as injeções de dependência corretas, você tem à disposição vários métodos úteis para persistir no banco de dados.

Segurança

Você conhece o conceito de guards do Angular? No Nest elas também existem. Basta rodar nest g guard auth para gerar a sua guard.

Como podem ver, o método canActivate retorna um booleano, que pode estar encapsulado em uma Promise ou Obvervable.

Por default, caso sua validação resulte em falso, o Nest retornará o seguinte erro:

Ele pode ser modificado de acordo com suas necessidades, basta lançar uma exceção de acordo com o que você precisar. Logo vou fazer um tutorial apenas a respeito de tratamento de erros com o Nest. Mas, por enquanto, vou deixar um trecho de código que pode ser inserido ao se retornar false na validação do usuário.

throw new HttpException('Forbidden', HttpStatus.FORBIDDEN);

Próximos conteúdos

O intuito deste post é esquentar as turbinas. O meu planejamento contempla os seguintes tutoriais.

1 . CRUD Básico Nest.js com Mongoose

2. CRUD Básico Nest.js com Postgresql

3. Separando a aplicação Nest em módulos

4. CRUD básico com Firestore.

5. Tratamento de erros e built-in exceptions

6. Autenticação e autorização com Nest.js

Espero que tenham se interessado por este framework e que tragam sugestões para os próximos. Esta foi apenas uma introdução para mostrar alguns trechos de código. Os próximos serão pura prática.

Os exemplos acima foram retirados da documentação oficial do Nest.js.

--

--