Módulos no NestJS: Um Guia Prático para Desenvolvedores

NestJS 26 de Jan de 2024

Texto de Paulo Clemente
Desenvolvedor e redator de mídias sociais na Rocketseat

O NestJS tem se destacado no mundo do desenvolvimento de aplicações Node.js pela sua robustez e facilidade de uso. Uma característica marcante desta framework é a sua abordagem modular, que facilita a organização do código e a manutenção da aplicação. Neste artigo, vamos explorar a fundo os Módulos do NestJS, ilustrando com exemplos práticos como eles podem ser utilizados para construir aplicações eficientes e escaláveis.

NLW unite | Evento gratuito de programação na prática | Rocketseat
Desafie-se em uma nova tecnologia criando um projeto completo em 3 aulas no maior evento online e gratuito de programação na prática para todos os níveis da Rocketseat.
Para melhor entendimento dos Módulos você precisa ter um breve conhecimento dos Controllers (Controladores), para isso recomendamos a leitura do artigo abaixo:

Entendendo Controllers em NestJS para um Desenvolvimento Eficiente

Entendendo Módulos no NestJS

Eles são, literalmente, unidades fundamentais que agrupam funcionalidades relacionadas. Cada Módulo no NestJS é uma classe anotada com @Module(), que pode encapsular controladores (Controllers), provedores (Providers), e até mesmo outros Módulos.

Elementos de um Módulo NestJS

Dentro de um Módulo, podemos encontrar diversos elementos:

O @Module()decorador pega um único objeto cujas propriedades descrevem o módulo;

providers: os provedores que serão instanciados pelo injetor Nest e que podem ser compartilhados pelo menos neste módulo;

controllers: o conjunto de controladores definidos neste módulo que devem ser instanciados;

imports: a lista de módulos importados que exportam os provedores exigidos neste módulo e

Teste seus conhecimentos em Node | Rocketseat
Quanto você sabe sobre Node? Teste seus conhecimentos de programação com a Rocketseat e descubra qual o seu nível de conhecimento nessa tecnologia nesse quiz gratuito 🚀

exports: o subconjunto providersdisso é fornecido por este módulo e deve estar disponível em outros módulos que importam este módulo. Você pode usar o próprio provedor ou apenas seu token ( providevalor).

Exemplo Prático de um Módulo Básico

Vamos considerar o seguinte código como nosso ponto de partida:


import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';

@Module({
  controllers: [UsersController],
  providers: [UsersService],
})
export class UsersModule {}

Este é o UsersModule, ele incorpora UsersController para lidar com as solicitações e UsersService para executar a lógica de negócios.

Para criar um módulo execute nest g module module_name

Módulos Compartilhados

Cada módulo é automaticamente um módulo compartilhado. Uma vez criado, pode ser reutilizado por qualquer módulo.

Para fazer isso, primeiro precisamos exportar o provider UsersService adicionando-o ao array exports, conforme mostrado abaixo:

import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';

@Module({
  controllers: [UsersController],
  providers: [UsersService],
  exports: [UsersService]
})
export class UsersModule {}
Teste seus conhecimentos em Node | Rocketseat
Quanto você sabe sobre Node? Teste seus conhecimentos de programação com a Rocketseat e descubra qual o seu nível de conhecimento nessa tecnologia nesse quiz gratuito 🚀

Injeção de dependência:

Um módulo também pode injetar provedores (por exemplo, para fins de configuração):

import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';

@Module({
  controllers: [UserController],
  providers: [UserService],
})
export class UserModule {
  constructor(private usersService: UsersService) {}
}

No entanto, as próprias classes de módulos não podem ser injetadas como provedores devido à dependência circular .

Os Módulos são uma característica intrínseca e poderosa do NestJS, proporcionando uma maneira eficaz de organizar e escalar aplicações. A modularidade, aliada à flexibilidade oferecida pela framework, torna o desenvolvimento com NestJS uma experiência eficiente e agradável.


Perguntas Frequentes

  1. Como um Módulo no NestJS melhora a estrutura da aplicação?Módulos no NestJS permitem uma organização lógica e segregação de funcionalidades, o que melhora a manutenibilidade e escalabilidade da aplicação.
  2. Posso ter múltiplos provedores em um Módulo NestJS?Sim, você pode ter quantos provedores forem necessários para encapsular a lógica de negócios dentro de um Módulo.
  3. Qual a vantagem de usar Middleware em Módulos NestJS?Middleware em Módulos permite que você execute código antes das rotas serem processadas, o que é útil para tarefas como logging ou autenticação.
  4. É possível integrar um Módulo NestJS com sistemas de banco de dados não-relacionais? Sim, o NestJS é flexível e pode ser integrado com uma variedade de sistemas de banco de dados, incluindo bancos de dados não-relacionais.

Marcadores