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.
Desafio
FácilSeu primeiro servidor Nest já contém três tarefas, mas nenhuma rota as retorna ainda. Adicione a rota que as lista.
- Abra
src/tasks/tasks.controller.ts. A classeTasksControllermantém a lista emthis.tasks.@Controller('tasks')acima da classe a encarrega dos caminhos sob/tasks. - No lugar do comentário, adicione um método (chame-o de
findAll) e marque-o com@Get(). Ele retornathis.tasks. O Nest envia como JSON o que o método retorna, com status 200. Getvem de@nestjs/common, assim comoController. 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.
}
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
1Fundamentos do Nest
Classes e métodosOlá, NestRegistrando um controller4Guardas, filtros e interceptadores
GuardasPratique por conta própria: Playground de Express