· Diogo Felizardo · NestJS  · 5 min de leitura

Como Criar um Projeto NestJS do Zero

Aprenda a criar um projeto NestJS do zero, entendendo a estrutura de pastas e implementando uma API básica com métodos GET e POST.

Aprenda a criar um projeto NestJS do zero, entendendo a estrutura de pastas e implementando uma API básica com métodos GET e POST.

O NestJS é um framework Node.js progressivo para construir aplicações server-side eficientes e escaláveis. Inspirado pelo Angular, ele utiliza conceitos como decorators e modularização, facilitando a criação e manutenção de projetos complexos. Neste tutorial, você aprenderá a criar um projeto NestJS do zero, entenderá a estrutura de pastas e implementará uma API básica com métodos GET e POST. Vamos lá!

Sumário

  1. Pré-requisitos
  2. Instalação do Nest CLI
  3. Criando um Novo Projeto NestJS
  4. Estrutura de Pastas do Projeto
  5. Implementando uma API Básica
  6. Executando e Testando a API
  7. Conclusão

Pré-requisitos

Antes de começar, certifique-se de ter instalado em sua máquina:

  • Node.js (versão 14 ou superior)
  • npm (gerenciador de pacotes do Node.js) ou Yarn
  • Nest CLI (interface de linha de comando do NestJS)

Instalação do Nest CLI

O Nest CLI facilita a criação e gerenciamento de projetos NestJS. Para instalá-lo globalmente, execute o seguinte comando no terminal:

npm install -g @nestjs/cli

Ou, se preferir usar o Yarn:

yarn global add @nestjs/cli

Após a instalação, verifique se o CLI foi instalado corretamente:

nest --version

Você deverá ver a versão instalada do Nest CLI.

Criando um Novo Projeto NestJS

Com o Nest CLI instalado, podemos criar um novo projeto. Execute o comando abaixo, substituindo meu-projeto-nest pelo nome desejado para o seu projeto:

nest new meu-projeto-nest

O CLI solicitará que você escolha o gerenciador de pacotes preferido (npm ou yarn). Selecione a opção de sua preferência e aguarde a instalação das dependências.

Estrutura de Pastas do Projeto

Após a criação do projeto, a estrutura básica de pastas será semelhante a esta:

meu-projeto-nest/
├── node_modules/
├── src/
│   ├── app.controller.spec.ts
│   ├── app.controller.ts
│   ├── app.module.ts
│   ├── app.service.ts
│   └── main.ts
├── test/
│   ├── app.e2e-spec.ts
│   └── jest-e2e.json
├── .eslintrc.js
├── .prettierrc
├── nest-cli.json
├── package.json
├── README.md
├── tsconfig.build.json
└── tsconfig.json

Descrição das Pastas e Arquivos Principais

  • node_modules/: Contém todas as dependências do projeto.
  • src/: Diretório principal do código-fonte.
    • main.ts: Ponto de entrada da aplicação.
    • app.module.ts: Módulo raiz da aplicação.
    • app.controller.ts: Controller principal.
    • app.service.ts: Service principal.
  • test/: Contém testes automatizados.
  • package.json: Gerencia as dependências e scripts do projeto.
  • tsconfig.json: Configurações do TypeScript.

Implementando uma API Básica

Vamos estender o projeto criado para incluir uma API básica com métodos GET e POST. Para isso, criaremos um módulo chamado tasks que gerenciará tarefas.

Criando o Módulo, Controller e Service

Use o Nest CLI para gerar um módulo, controller e service para tasks:

cd meu-projeto-nest
nest generate module tasks
nest generate controller tasks
nest generate service tasks

Após a execução desses comandos, a estrutura de pastas será atualizada:

src/
├── app.controller.spec.ts
├── app.controller.ts
├── app.module.ts
├── app.service.ts
├── main.ts
└── tasks/
    ├── tasks.controller.spec.ts
    ├── tasks.controller.ts
    ├── tasks.module.ts
    └── tasks.service.ts

Implementando Endpoints GET e POST

Vamos implementar dois endpoints:

  1. GET /tasks: Retorna a lista de tarefas.
  2. POST /tasks: Cria uma nova tarefa.

1. Definindo o Modelo de Tarefa

Crie um arquivo para definir o modelo de tarefa.

Caminho: src/tasks/task.model.ts

export interface Task {
  id: number;
  title: string;
  description?: string;
}

2. Implementando o Service

O service gerenciará a lógica de negócio relacionada às tarefas.

Caminho: src/tasks/tasks.service.ts

import { Injectable } from '@nestjs/common';
import { Task } from './task.model';

@Injectable()
export class TasksService {
  private tasks: Task[] = [];
  private idCounter = 1;

  getAllTasks(): Task[] {
    return this.tasks;
  }

  createTask(title: string, description?: string): Task {
    const task: Task = {
      id: this.idCounter++,
      title,
      description,
    };
    this.tasks.push(task);
    return task;
  }
}

3. Implementando o Controller

O controller define os endpoints e utiliza o service para manipular os dados.

Caminho: src/tasks/tasks.controller.ts

import { Controller, Get, Post, Body } from '@nestjs/common';
import { TasksService } from './tasks.service';
import { Task } from './task.model';

@Controller('tasks')
export class TasksController {
  constructor(private readonly tasksService: TasksService) {}

  @Get()
  getAllTasks(): Task[] {
    return this.tasksService.getAllTasks();
  }

  @Post()
  createTask(
    @Body('title') title: string,
    @Body('description') description?: string,
  ): Task {
    return this.tasksService.createTask(title, description);
  }
}

4. Atualizando o Módulo

Certifique-se de que o TasksModule está importado no módulo raiz (AppModule).

Caminho: src/app.module.ts

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

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

Visualizando a Estrutura Atualizada

A estrutura de pastas após as modificações:

src/
├── app.controller.spec.ts
├── app.controller.ts
├── app.module.ts
├── app.service.ts
├── main.ts
└── tasks/
    ├── task.model.ts
    ├── tasks.controller.spec.ts
    ├── tasks.controller.ts
    ├── tasks.module.ts
    └── tasks.service.ts

Executando e Testando a API

Vamos agora executar a aplicação e testar os endpoints GET e POST utilizando o Postman ou cURL.

1. Iniciando o Servidor

No diretório raiz do projeto, execute:

npm run start

Você deverá ver uma mensagem indicando que a aplicação está rodando em http://localhost:3000.

2. Testando o Endpoint GET /tasks

Este endpoint retorna a lista de tarefas. Inicialmente, estará vazia.

Usando cURL:

curl -X GET http://localhost:3000/tasks

Resposta Esperada:

[]

Usando Postman:

  • Abra o Postman.
  • Crie uma nova requisição do tipo GET.
  • Insira a URL: http://localhost:3000/tasks.
  • Clique em Send.
  • Você verá uma resposta vazia ([]).

3. Testando o Endpoint POST /tasks

Este endpoint cria uma nova tarefa. Vamos adicionar uma tarefa para ver como funciona.

Usando cURL:

curl -X POST http://localhost:3000/tasks \
     -H "Content-Type: application/json" \
     -d '{"title": "Minha Primeira Tarefa", "description": "Descrição da tarefa"}'

Resposta Esperada:

{
  "id": 1,
  "title": "Minha Primeira Tarefa",
  "description": "Descrição da tarefa"
}

Usando Postman:

  • Abra o Postman.

  • Crie uma nova requisição do tipo POST.

  • Insira a URL: http://localhost:3000/tasks.

  • Na aba Body, selecione raw e JSON.

  • Insira o seguinte JSON:

    {
      "title": "Minha Primeira Tarefa",
      "description": "Descrição da tarefa"
    }
    
  • Clique em Send.

  • Você verá a resposta com os detalhes da tarefa criada.

4. Verificando a Lista de Tarefas Atualizada

Após adicionar uma tarefa, vamos verificar se ela aparece na lista.

Usando cURL:

curl -X GET http://localhost:3000/tasks

Resposta Esperada:

[
  {
    "id": 1,
    "title": "Minha Primeira Tarefa",
    "description": "Descrição da tarefa"
  }
]

Usando Postman:

  • Repita o passo de GET /tasks.
  • Você verá a lista com a tarefa recém-criada.

Conclusão

Neste tutorial, você aprendeu a criar um projeto NestJS do zero, compreendeu a estrutura de pastas padrão e implementou uma API básica com métodos GET e POST. O NestJS, com sua arquitetura modular e uso de decorators, oferece uma maneira eficiente e escalável de desenvolver aplicações backend em Node.js.

Agora que você tem os fundamentos, pode explorar recursos mais avançados do NestJS, como integração com bancos de dados, autenticação, validação de dados e muito mais. Aproveite o poder do NestJS para construir aplicações robustas e de alto desempenho!

Se este tutorial foi útil para você, não esqueça de compartilhar e deixar seu feedback nos comentários!

Olá Dev 👋🏻

Se você achou este post útil, considere dar uma estrela no repositório do GitHub ou compartilhar nas suas redes sociais favoritas 😍. Seu apoio faria toda a diferença!

Dúvidas? 🙋

Se tiver alguma pergunta sobre desenvolvimento backend, sinta-se à vontade para criar uma nova issue no GitHub usando o botão abaixo. Ficarei feliz em ajudar com qualquer assunto que você queira explorar!
Compartilhar conhecimento é a melhor forma de crescermos juntos 👨🏻‍💻.
Me faça uma pergunta
Back to Blog

Posts relacionados

Ver todos os posts »
Guia Completo dos Comandos CLI do NestJS

Guia Completo dos Comandos CLI do NestJS

Aprenda a utilizar a CLI do NestJS de forma eficiente com este guia completo. Descubra os principais comandos, entenda para que cada um serve e veja o que eles geram em seu projeto.