O NestJS é um framework de back-end robusto e eficiente que está ganhando popularidade entre os desenvolvedores Node.js. Escrito em TypeScript, ele oferece uma arquitetura de aplicação escalável e confiável, inspirada no Angular, que facilita a construção de aplicações server-side eficientes e organizadas. Ele também vem com um sistema de injeção de dependências integrado, o que simplifica a gestão de dependências e promove um código mais limpo e testável.
Principais funcionalidades
Modules
No core do NestJS estão os modules, que são unidades fundamentais de organização de código. Cada módulo encapsula uma parte da lógica da aplicação e pode conter componentes como controladores, serviços e entidades.
Controllers
Controllers são responsáveis por manipular as solicitações e respostas HTTP e outros métodos de comunicação. Eles definem rotas e lidam com a lógica de negócios necessária para processar as solicitações dos clientes.
Services
Services no NestJS são classes que encapsulam a lógica de negócios e podem ser reutilizadas em diferentes partes da aplicação. Eles são uma parte crucial do princípio de separação de responsabilidades que o NestJS promove.
Providers
Providers são classes com comportamentos diversos, como repositórios. Você consegue reutilizar essa classe em qualquer módulo que necessite, desde que faça a injeção dela no mesmo, um exemplo seria uma classe de repositório.
Dependency Injection
A injeção de dependência é um design pattern que o NestJS utiliza para aumentar a eficiência e modularidade do código. Ela permite que as classes recebam suas dependências de uma forma controlada e testável.
Primeiro projeto com NestJS
Para iniciar um projeto NestJS, você precisará ter o Node.js instalado em sua máquina. Após isso, a criação de um novo projeto é simples com o uso do CLI (Command Line Interface) do NestJS. Basta seguir os seguintes passos:
1. Instale o CLI do NestJS globalmente:
npm i -g @nestjs/cli
2. Crie um novo projeto:
nest new primeiro-projeto
3. Entre na pasta do projeto:
cd primeiro-projeto
4. Inicie o servidor de desenvolvimento:
npm run start:dev
5. No navegador, ou Postman, acesse a URL: http://localhost:3000
Você deve ver o seguinte resultado:
Mais adiante vamos entender como esse resultado foi gerado.
Estrutura de pasta e arquivos
O NestJS possui a seguinte estrutura de pasta e arquivos, sendo que todo código fonte fica localizado na pasta src. A seguir, vamos entender um pouco melhor dos principais pontos envolvidos no funcionamento do projeto recém-criado:
app.controller.ts: Classe responsável por lidar com requisições HTTP da aplicação, fazendo uso da anotação @Controller()
. Note a existência de um método com a anotação @Get
, e cujo retorno é uma chamada à classe AppService. Esse é o método que responde à requisição que fizemos na URL localhost:3000 (usando o verbo GET).
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
app.service.ts: classe responsável por encapsular lógicas e regras. É aqui onde serão injetadas outras classes como os repositórios, utilizando a anotação @Injectable()
. Observe o retorno “Hello World!”, que vimos anteriormente no browser quando acessamos a aplicação.
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
app.module: também conhecido como coração do projeto, é aqui onde é feita toda orquestração de modules, controllers, services, providers entre muitos outros. Como se trata aqui de um projeto recém-criado, temos apenas a declaração do AppController e do AppService, que vimos anteriormente.
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
main.ts: arquivo responsável por orquestrar a execução do app.module e iniciar o servidor em uma porta específica (note o uso da porta 3000 que acessamos anteriormente). Este é o ponto de entrada da aplicação.
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
Conclusão
O NestJS se destaca como uma opção moderna e eficaz para desenvolvimento de back-end. A modularidade e o sistema de injeção de dependências do NestJS garantem um código organizado, testável e fácil de manter. Se você deseja construir aplicações server-side robustas e escaláveis, esta é uma escolha inteligente que pode impulsionar sua carreira e projetos a novos patamares.