Gerenciar um aplicativo de grande escala pode ser tedioso, especialmente quando construído sem uma estrutura bem planejada e uma estratégia rigorosa de organização de código. Isso pode levar a desastres durante a manutenção e deve ser evitado a todo custo. Esse desastre é causado por mudanças feitas na base de código e novos recursos à medida que o projeto cresce em sua base de usuários.

Já o Nest.js foi criado para resolver problemas de estruturação e organização de código. Ele combina abordagens modernas e modulares com princípios de engenharia de software.

Nest.js utiliza TypeScript para verificação de tipos e oferece uma arquitetura de software pronta para construir e implantar aplicativos testáveis, escaláveis, com baixo acoplamento e fácil manutenção.

Neste artigo, vamos explorar o Nest.js e o que você pode construir com ele. Também vamos falar sobre os pontos positivos e negativos do framework para que você entenda por que as empresas o escolhem em relação a outros frameworks do Node.js. E, por fim, vamos mostrar como criar uma API de lista de tarefas com o Nest.js.

O que é Nest.js?

O Nest.js é um dos frameworks Node.js de crescimento mais rápido para construir aplicativos backend eficientes, escaláveis e de nível empresarial usando o Node.js. Ele é conhecido por produzir aplicativos altamente testáveis, de fácil manutenção e escaláveis utilizando JavaScript e TypeScript modernos.

A logo oficial do Nest.js
A logo oficial do Nest.js. (Fonte da imagem: Behance)

Com mais de 46,6k estrelas e 5,4k forks no GitHub, e uma contagem semanal de downloads de até 700.000, o framework é uma escolha popular para desenvolver seu projeto backend com Node.js.

Nest.js é a solução perfeita para o seu próximo projeto se você precisa construir um aplicativo escalável, de fácil manutenção e de nível empresarial.

Na próxima seção, vamos explorar para que ele é usado e as diferentes empresas que utilizam o framework em produção.

Para que o Nest.js é usado?

O Nest.js é um framework do lado do servidor Node.js excelente para construir aplicativos backend altamente testáveis e de fácil manutenção. Você pode criar inúmeros tipos de aplicativos com o Nest.js; você está limitado apenas pelas funcionalidades que seus aplicativos necessitam.

Como o framework utiliza TypeScript, o Nest.js é especialmente popular entre equipes que desejam aproveitar o poder de verificação de tipos do TypeScript. Além disso, é simples de aprender e dominar, com uma poderosa interface de linha de comando (CLI) para impulsionar a produtividade e facilitar o desenvolvimento. Essa CLI poderosa facilita o início de qualquer projeto server-side e acompanhar sua conclusão.

Além disso, Nest.js mantém documentação detalhada, e sua comunidade de desenvolvedores e colaboradores é muito ativa e pronta para responder às questões em tempo real.

Esses motivos facilitam entender por que tantas empresas estão migrando para o Nest.js em vez de outros frameworks. Abaixo está uma lista de algumas marcas populares que utilizam o framework em produção.

Roche

A Roche é uma empresa multinacional de saúde que opera sob duas divisões, farmacêutica e diagnóstica. Esta empresa americana de biotecnologia usa a estrutura Nest.js em seu site principal para atender seus pacientes de forma confiável e para expandir ainda mais seus serviços.

A página oficial da Roche
A página oficial da Roche

Adidas

Adidas é a maior fabricante de roupas esportivas da Europa e a segunda maior do mundo. A Adidas é conhecida por projetar e fabricar calçados, roupas e acessórios. Seu alcance global e popularidade são o motivo pelo qual eles decidiram usar a estrutura altamente escalável do Nest.js para construir aplicativos em larga escala e eficientes para sua marca.

A página inicial oficial da Adidas
A página inicial oficial da Adidas

Decathlon

Decathlon é um varejista de produtos esportivos com mais de 1.500 lojas em 57 países. A Decathlon escolheu a Nest.js como backend para o seu aplicativo web, visando escalabilidade e manutenção da sua base de códigos.

A página inicial oficial do Decathlon
A página inicial oficial do Decathlon

Você pode encontrar uma lista de empresas, projetos e ferramentas adicionais construídas com o Nest.js no GitHub.

A seguir, discutiremos por que você e sua empresa devem escolher o Nest.js para o seu próximo projeto, fornecendo insights sobre por que outras pessoas já usam o framework e seus benefícios.

Por que escolher o Nest.js

A escolha de um framework depende do tipo de aplicativo que você está desenvolvendo, já que diferentes aplicativos requerem um conjunto diferente de ferramentas.

Aqui, listaremos diferentes razões para selecionar o Nest.js como sua framework Node.js para atualizar ou construir seu próximo projeto.

  • Fácil aprendizado e domínio: O Nest.js é fácil de aprender e dominar, especialmente para desenvolvedores familiarizados com o mundo do Angular. Isso permite um processo de desenvolvimento rápido e eficiente, pois os membros da equipe podem se adaptar facilmente a novos princípios e estruturas de desenvolvimento.
  • Excelente estrutura arquitetônica: A framework possui uma excelente estrutura arquitetônica para aplicativos empresariais, pronta para uso. Isso facilita a construção de aplicativos empresariais altamente escaláveis e de fácil manutenção.
  • Ampla variedade de opções de construção: Com o Nest.js, você pode construir serviços backend que vão desde APIs RESTful, aplicativos GraphQL, aplicativos MVC, WebSockets, CLI e Cron jobs com facilidade. Algumas arquiteturas padrão já estão incorporadas no framework do Nest.js.
  • Tecnologias modernas e testes unitários: O Nest.js utiliza tecnologias modernas como TypeScript, padrões arquiteturais robustos, excelente documentação e facilita os testes unitários. Isso permite a construção de aplicativos empresariais escaláveis e de fácil manutenção.
  • Suporte para construção de grandes aplicativos: O Nest.js foi criado para construir aplicativos monolíticos e microsserviços de grande escala, em que a arquitetura já é tratada e você só precisa desenvolver a lógica do seu negócio.
  • Suporte à comunidade e módulos: O Nest.js oferece suporte a uma grande comunidade e a diversos módulos desenvolvidos pela comunidade. Você pode escolher entre vários módulos suportados pelo Nest.js, como TypeORM, Mongoose, GraphQL, logging, validação, cache, WebSockets e muito mais, para construir qualquer recurso específico que você precise.

Agora, vamos explorar os prós e os contras do Nest.js. Isso ajudará a solidificar sua decisão de adotar o framework, à medida que discutimos os aspectos positivos e negativos.

Prós e contras do Nest.js

Aqui, vamos enumerar os prós e contras do Nest.js para uma melhor compreensão de por que ele é um framework tão popular no ecossistema do Node.js.

Os prós

Alguns dos benefícios de usar o Nest.js incluem:

  • Poderoso, mas fácil de usar: O framework é amigável para os desenvolvedores trabalharem, a ponto de mesmo os recursos mais complexos e poderosos serem fáceis de usar. A equipe do Nest.js projetou o framework para que os desenvolvedores possam começar rapidamente e se concentrar exclusivamente na escrita da lógica de negócios, enquanto o framework cuida de outros aspectos importantes do desenvolvimento, como segurança.
  • Sintaxe de estilo Angular (backend): Angular é um framework de frontend muito popular com uma concentração em arquitetura e estruturação. Nest.js atua como Angular para o backend, pois utiliza o estilo e a sintaxe do Angular para ajudar a estruturar o seu projeto empresarial.
  • TypeScript: O Nest.js oferece suporte ao TypeScript logo de início, resolvendo problemas de desempenho e permitindo escrever rapidamente aplicativos de fácil manutenção, fornecendo erros e avisos de compilação. O TypeScript é bem integrado ao VSCode, proporcionando um ambiente de desenvolvimento acessível.
  • Documentação completa: O Nest.js apresenta uma das melhores documentações para qualquer framework, o que é muito fácil de entender. Isso economiza tempo de depuração, permitindo que você consulte rapidamente a documentação e encontre a solução para o seu problema.
  • Boa arquitetura e rápido desenvolvimento: O Nest.js economiza tempo ao construir seu aplicativo, seja criando seu primeiro MVP ou o aplicativo real, pois ele oferece uma estrutura e arquitetura sólidas para começar, melhorando assim seus processos de desenvolvimento.

Os contras

Existe um ditado famoso que diz: “Toda vantagem tem suas desvantagens” – e o Nest.js não é exceção. Então, vamos explorar as desvantagens do Nest.js.

  • Difícil para iniciantes: O Nest.js pode ser um pouco complicado para desenvolvedores iniciantes que não têm experiência com Angular. Além disso, como nem todo desenvolvedor JavaScript utiliza TypeScript, o framework pode ser desafiador para esses desenvolvedores também. No entanto, assim como qualquer outra tecnologia, ele requer tempo e prática para dominar.
  • Depuração trabalhosa: Por mais que o TypeScript tenha suas vantagens, ele também pode trazer algumas dificuldades na depuração, especialmente para desenvolvedores menos experientes no mundo do TypeScript.

Aí estão os prós e contras do Nest.js e como eles podem influenciar sua decisão na escolha deste framework.

A seguir, vamos praticar a construção de uma API RESTful com o Nest.js para solidificar o que aprendemos até agora. Continue lendo para aprender como desenvolver uma API de lista de tarefas que permitirá aos usuários criar e gerenciar suas próprias listas de tarefas.

Construa sua primeira API RESTful com o Nest.js

É hora de praticar tudo o que aprendemos sobre o Nest.js, construindo nossa primeira API RESTful para demonstrar o poder e a simplicidade que ele oferece.

Começaremos configurando o framework e instalando todas as ferramentas necessárias para colocá-lo em funcionamento.

1. Configurando o Nest.js

Primeiro, instalamos o Nest CLI para criar novos projetos com este comando:

npm i -g @nestjs/cli

Depois disso, crie um novo projeto usando este comando abaixo:

nest new nest-todo-api
cd nest-todo-api
npm run start:dev

Agora que temos o Nest CLI instalado e nosso novo projeto criado com sucesso, vamos construir nossa API.

Abra o projeto em um editor de código da sua escolha. Se você acessar localhost:3000, deverá ser recebido com uma mensagem de boas-vindas mostrando que tudo funciona corretamente.

A seguir, vamos configurar um banco de dados MongoDB para conectar e gerenciar nossos dados de tarefas em todo o projeto.

Antes de prosseguirmos, vamos gerar todos os arquivos que precisaremos para criar a API com os seguintes comandos:

nest generate module todos
nest generate controller todos
nest generate service todos

2. Configurando o MongoDB

A seguir, vamos instalar e configurar o MongoDB para funcionar com o projeto que criamos anteriormente.

Após instalar o MongoDB em sua máquina local, execute o seguinte comando para instalar a biblioteca Mongoose em nosso projeto recém-criado:

npm install --save @nestjs/mongoose mongoose

Isso é tudo que você precisa fazer.

Em seguida, vamos gerar os arquivos e importar o Mongoose para se comunicar com o projeto e o MongoDB.

Vamos importar o Mongoose em nosso arquivo de módulo do aplicativo antes de gerar os demais arquivos necessários:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { MongooseModule } from '@nestjs/mongoose';
import { TodosModule } from './todos/todos.module';

@Module({
  imports: [MongooseModule.forRoot('mongodb://localhost/todos), TodosModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

3. Construindo o Esquema

A seguir, vamos construir o esquema do banco de dados para o nosso banco de dados. Este esquema irá especificar como os dados serão representados em nosso banco de dados.

Vamos defini-lo em nosso arquivo todos.schema.ts:

import * as mongoose from 'mongoose';
export const ItemSchema = new mongoose.Schema({
  title: String,
  is_completed: Boolean,
  description: String,
});

4. Definindo interfaces

Agora, vamos criar uma interface para verificação de tipos.

Vamos defini-la em nosso arquivo interfaces/todo.interface.ts:

import { Document } from 'mongoose';
export interface Item extends Document {
  id?: string;
  title: string;
  description?: string;
  is_completed: boolean;
}

5. Criando o DTO

Finalmente, vamos construir um DTO (Data Transfer Object) que define como os dados serão enviados ou passados de objeto para objeto através da rede.

É uma classe básica com a mesma propriedade do nosso esquema:

// ./dto/create-todo.ts
export class CreateItemDto {
  readonly title: string;
  readonly description: string;
  readonly is_completed: boolean;
}

6. Configurando o Model/Service

O arquivo do serviço é responsável pela interação e comunicação com o banco de dados MongoDB. Ele é usado para criar, recuperar, atualizar e excluir registros do esquema todos que criamos anteriormente.

Abra seu arquivo de serviços e adicione os seguintes códigos:

import { Injectable } from '@nestjs/common';
import { Todo } from './interfaces/todo.interface';
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
import { CreateTodoDto } from './dto/create-todo.dto';

@Injectable()

export class ItemsService {
  constructor(@InjectModel('Todo') private readonly todoModel: Model) {}
  async findAll(): Promise<Todo[]> {
    return await this.todoModel.find();
  }
  async findOne(id: string): Promise {
    return await this.todoModel.findOne({ _id: id });
  }
  async create(item: CreateItemDto): Promise {
    const newTodo = new this.todoModel(item);
    return await newTodo.save();
  }
  async delete(id: string): Promise {
    return await this.todoModel.findByIdAndRemove(id);
  }
  async update(id: string, todo: CreateTodoDto): Promise {
    return await this.todoModel.findByIdAndUpdate(id, todo, { new: true });
  }
}

O snippet de código acima representa um aplicativo CRUD (criar, ler, atualizar, excluir) em nossa API usando o modelo Mongoose para fornecer acesso ao nosso banco de dados MongoDB subjacente.

A seguir, criaremos nosso arquivo controlador para lidar com toda a lógica e nos comunicarmos com o serviço que criamos acima.

7. Configurando os controladores

O controlador é responsável por lidar com as requisições recebidas e enviar respostas de volta ao cliente.

Vamos definir nosso controlador Todo e colar no seguinte snippet de código:

import {
  Controller,
  Get,
  Post,
  Put,
  Delete,
  Body,
  Param,
} from '@nestjs/common';
import { CreateTodoDto } from './dto/create-todo.dto';
import { TodosService } from './todos.service';
import { Todo } from './interfaces/todo.interface';

@Controller('items')

export class ItemsController {
  constructor(private readonly todosService: TodosService) {}

  @Get()
  findAll(): Promise<Todo[]> {
    return this.todosService.findAll();
  }
  
  @Get(':id')
  findOne(@Param('id') id): Promise {
    return this.todosService.findOne(id);
  }
  
  @Post()
  create(@Body() createTodoDto: CreateTodoDto): Promise {
    return this.todosService.create(createTodoDto);
  }
  
  @Delete(':id')
  delete(@Param('id') id): Promise {
    return this.todosService.delete(id);
  }
  
  @Put(':id')
  update(@Body() updateTodoDto: CreateTodoDto, @Param('id') id): Promise {
    return this.todosService.update(id, updateTodoDto);
  }
}

O framework usa anotações para lidar com muitas funcionalidades nos bastidores – por exemplo, para lidar com o sistema de roteamento do framework, fornecendo diferentes anotações correspondentes a cada rota (@Put(), @Delete(), @Post(), @Get()) para os métodos Put, Delete, Post, e Get de uma API RESTful, respectivamente.

8. Testando a API com o Postman

Por fim, vamos testar nossa API recém-criada com o Postman. Precisamos iniciar o servidor de desenvolvimento para garantir que tudo esteja funcionando corretamente antes de implantar em um servidor de produção.

npm run start:dev

Você pode baixar e executar o Postman para testar sua API RESTful.

Resultado da lista de tarefas do Nest.js
Resultado da lista de tarefas do Nest.js

Resumo

Nest.js é um poderoso framework Node.js e o framework TypeScript mais popular disponível atualmente.

Ele fornece à equipe de engenharia uma arquitetura de desenvolvimento padrão e as melhores práticas da indústria. Com ele, os desenvolvedores podem abstrair processos de engenharia repetitivos para se concentrarem exclusivamente no desenvolvimento da lógica de negócios.

Essas vantagens são o que motivam marcas populares como Adidas, Roche e outras a utilizarem o framework em seus aplicativos empresariais de produção.

Neste artigo, estabelecemos uma base sólida para o Nest.js e explicamos por que você e sua empresa devem considerar a migração para ele. Além disso, construímos uma API RESTful simples de lista de tarefas para demonstrar na prática as incríveis capacidades do framework.

Agora cabe a você decidir se o Nest.js é o framework perfeito para você.