1

NestJS - Um framework alternativo para construção de aplicações backend

#JavaScript #Node.js
Jailson Silveira
Jailson Silveira

Já faz um bom tempo que venho utilizando o NestJs em aplicações. Trata-se de um framework para o desenvolvimento de aplicações backend altamente inspirado em um framework de frontend, o Angular, e que também é totalmente compatível com o Typescript.

O Nest conta com conceitos importantes como a criação de módulos, providers, controllers, pipes, dentre outros componentes que podem ser criados rapidamente através do utilitário Nest Cli.

Inclusive, conforme a documentação do NestJs (https://docs.nestjs.com), você pode instalar o utilitário de linha de comando e utilizá-lo para iniciar uma nova aplicação:

npm i -g @nestjs/cli
nest new meu-projeto


Isso irá criar os arquivos bases de um projeto com o framework.

Note que no diretório de arquivos fonte existe um arquivo main.ts, o qual instancia o módulo principal da aplicação (AppModule) e inicializa a aplicação na porta 3000:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';


async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();




Olhando para o módulo principal, o app.module, note que o mesmo consiste de uma classe que é anotada com a notação @Module, a qual define a criação de um módulo. No módulo, pode-se importar outros módulos, definir controllers, providers e expor recursos do módulo que queiram ser externalizados (disponíveis fora do contexto do módulo):

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';


@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}



O controller criado por padrão consiste em uma classe anotada com o decorator @Controller. @Controller pode receber um argumento que indica o caminho base para o tratamento das requisições.

Os métodos de um controller podem ser mapeados para tratar requisições HTTP. Diversas anotações podem ser utilizadas para essa finalidade, correspondendo a verbos HTTP, como @Get, @Post, @Detele e @Put.

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();
  }
}


No exemplo acima, o método getHello é acionado se for feita uma requisição para o servidor.

Contudo, conforme mencionado anteriormente, podem-se definir outros caminhos:

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';


@Controller("api")
export class AppController {
  constructor(private readonly appService: AppService) {}


  @Get("hello")
  getHello(): string {
    return this.appService.getHello();
  }
}

Neste caso, o método getHello será acionado para requisições realizadas para o endpoint /api/hello


O NestJs possui ainda o recurso de injeção de dependências. Classes anotadas com @Injectable são instanciadas pelo framework e podem ser recuperadas se declaradas no construtor da classe, como é o caso do AppService injetado no construtor do AppController.


Por fim, vale mencionar que o NestJs possui uma boa documentação e vários códigos de exemplo, além de compatibilidade com diversas bibliotecas, como o sequelizejs, typeorm, openapi, dentre outros.






1
35

Comentários (1)

0
Felipe

Felipe

29/12/2020 00:41

meu framework favorito, muito bom Jailson.

👀 ainda teremos conteído em curso dele por aqui,,,

None

Brasil