Menu
CoddyTech

Xin chào, Nest

Thuộc phần TypeScript và NestJS trong hành trình Node.js của Coddy. Bài học 2 trên 24.

Trong Express, mỗi route là một hàm mà bạn tự đăng ký. NestJS cung cấp cho mỗi phần của API một lớp riêng, còn decorator cho Nest biết mỗi lớp làm gì.

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

Một bộ điều khiển xử lý các yêu cầu đến một đường dẫn. @Controller('books') và @Get() là các decorator. Decorator bắt đầu bằng @ và nằm trên dòng phía trên một lớp hoặc phương thức, cho Nest biết chúng dùng để làm gì. Decorator của Nest luôn kết thúc bằng (), ngay cả khi bên trong không có gì. Kết hợp với nhau, chúng ánh xạ findAll tới GET /books, và Nest gửi nội dung mà phương thức trả về dưới dạng JSON với trạng thái 200. Nest không bao giờ gửi yêu cầu đến phương thức không có decorator route.

Một module liệt kê các lớp thuộc cùng một nhóm. src/main.ts gọi NestFactory.create(AppModule); AppModule nhập TasksModule, module này liệt kê TasksController. Trên máy tính xách tay, bạn sẽ khởi động ứng dụng bằng npm run start; ở đây, nút Chạy sẽ thực hiện việc đó.

Trong mã khởi tạo, interface Task mô tả các trường của một đối tượng task, còn Task[] nghĩa là một mảng các đối tượng đó. private giữ một trường bên trong lớp của nó. Kiểu dữ liệu sau dấu ngoặc đơn của phương thức mô tả giá trị mà phương thức trả về. Các chú giải kiểu này giúp TypeScript kiểm tra code của bạn; decorator của Nest định nghĩa các route.

challenge icon

Thử thách

Dễ

Máy chủ Nest đầu tiên của bạn đã có ba nhiệm vụ, nhưng chưa có tuyến nào trả về chúng. Hãy thêm tuyến liệt kê các nhiệm vụ đó.

  1. Mở src/tasks/tasks.controller.ts. Lớp TasksController giữ danh sách trong this.tasks. @Controller('tasks') phía trên lớp này giao cho nó phụ trách các đường dẫn bắt đầu bằng /tasks.
  2. Ở vị trí chú thích, thêm một phương thức (đặt tên là findAll) và đánh dấu phương thức đó bằng @Get(). Phương thức này trả về this.tasks. Nest gửi giá trị mà phương thức trả về dưới dạng JSON, với mã trạng thái 200.
  3. Get được nhập từ @nestjs/common, giống như Controller. Thêm nó vào câu lệnh import ở dòng đầu tiên.

Thử nhé: nhấn Run, rồi gửi GET /tasks. Bạn nhận được mã 200 và ba nhiệm vụ:

[
  { "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 }
]

Sau đó gửi GET /task, không có chữ s. Không có tuyến nào khớp với đường dẫn đó, nên Nest phản hồi bằng mã 404:

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

Tự làm thử

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 },
    ];

    // Thêm một phương thức (method) tại đây để trả về danh sách khi nhận yêu cầu GET /tasks.
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong TypeScript và NestJS

Tự luyện tập: Playground Express