Menu
CoddyTech

Olá, Nest

Parte da seção TypeScript e NestJS do Journey de Node.js da Coddy. Lição 2 de 24.

No Express, cada rota é uma função que você registra manualmente. O NestJS dá à API uma classe própria para cada parte, e os decoradores dizem ao Nest o que cada classe faz.

@Controller('books')
export class BooksController {
    @Get()
    findAll() {
        return [{ title: 'Dune' }];
    }
}

Um controlador responde às solicitações de um caminho. @Controller('books') e @Get() são decoradores. Um decorador começa com @ e fica na linha acima de uma classe ou método, indicando ao Nest para que serve. Os decoradores do Nest sempre terminam em (), mesmo quando não há nada dentro. Juntos, eles mapeiam findAll para GET /books, e o Nest envia como JSON o que o método retorna, com status 200. O Nest nunca envia uma solicitação para um método que não tenha um decorador de rota.

Um módulo lista as classes que pertencem ao mesmo conjunto. src/main.ts chama NestFactory.create(AppModule); AppModule importa TasksModule, que lista TasksController. Em um laptop, você iniciaria o programa com npm run start; aqui, o botão Executar faz isso.

No código inicial, interface Task descreve os campos de um objeto de tarefa, e Task[] significa um array deles. private mantém um campo dentro da própria classe. Um tipo após os parênteses de um método descreve o valor retornado por ele. Essas anotações ajudam o TypeScript a verificar seu código; os decoradores do Nest definem as rotas.

challenge icon

Desafio

Fácil

Seu primeiro servidor Nest já contém três tarefas, mas nenhuma rota as retorna ainda. Adicione a rota que as lista.

  1. Abra src/tasks/tasks.controller.ts. A classe TasksController mantém a lista em this.tasks. @Controller('tasks') acima da classe a encarrega dos caminhos sob /tasks.
  2. No lugar do comentário, adicione um método (chame-o de findAll) e marque-o com @Get(). Ele retorna this.tasks. O Nest envia como JSON o que o método retorna, com status 200.
  3. Get vem de @nestjs/common, assim como Controller. Adicione-o à importação na primeira linha.

Teste: pressione Run e, em seguida, envie GET /tasks. Você recebe 200 e as três tarefas:

[
  { "id": 1, "title": "Write the README", "done": true },
  { "id": 2, "title": "Fix the login bug", "done": false },
  { "id": 3, "title": "Plan the sprint", "done": false }
]

Depois, envie GET /task, sem o s. Nenhuma rota corresponde a esse caminho, então o Nest responde com 404:

{ "message": "Cannot GET /task", "error": "Not Found", "statusCode": 404 }

Experimente você mesmo

import { Controller } from '@nestjs/common';

interface Task {
    id: number;
    title: string;
    done: boolean;
}

@Controller('tasks')
export class TasksController {
    private tasks: Task[] = [
        { id: 1, title: 'Write the README', done: true },
        { id: 2, title: 'Fix the login bug', done: false },
        { id: 3, title: 'Plan the sprint', done: false },
    ];

    // Adicione aqui um método que responda a GET /tasks com a lista.
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de TypeScript e NestJS

Pratique por conta própria: Playground de Express