Tham số route
Thuộc phần TypeScript và NestJS trong hành trình Node.js của Coddy. Bài học 4 trên 24.
Client thường chỉ cần một tác vụ, không cần cả danh sách. Đường dẫn có thể chứa một tham số: một phần thay đổi theo từng yêu cầu.
@Get(':isbn')
findOne(@Param('isbn') isbn: string) {
return this.books.find((book) => book.isbn === isbn);
}:isbn khớp với bất kỳ giá trị nào ở vị trí đó trong đường dẫn, vì vậy GET /books/978 sẽ gọi phương thức này. @Param('isbn') chuyển giá trị đó vào phương thức. Giá trị này luôn là văn bản: /books/42 cho ra chuỗi '42', không bao giờ là số 42.
Bỏ tên đi, @Param() sẽ trả về đối tượng chứa mọi tham số, { isbn: '978' }, thay vì giá trị.
Thử thách
DễỨng dụng khách thường chỉ cần một công việc, không phải cả danh sách. Thêm một tuyến trả về một công việc theo id của nó.
- Trong
src/tasks/tasks.controller.ts, thêm phương thức thứ hai vàoTasksController(đặt tên làfindOne) choGET /tasks/:id.:idđại diện cho bất kỳ giá trị nào ở vị trí đó trong đường dẫn, vì vậy/tasks/2sẽ truy cập tuyến này. - Đọc id từ đường dẫn bằng
@Param('id'). NhậpParamtừ@nestjs/common. - Id được nhận dưới dạng văn bản, như
"2", nhưng các id trongthis.taskslà số, còn"2" === 2là false. Chuyển id thành số trước khi so sánh. - Trả về công việc có id đó.
- Giữ nguyên
GET /tasks: tuyến này vẫn trả về toàn bộ danh sách.
Thử nhé: gửi GET /tasks/2. Bạn nhận được 200 và:
{ "id": 2, "title": "Fix the login bug", "done": false }Gửi cả GET /tasks/1 và GET /tasks/3. Sau đó gửi GET /tasks/99. Không có công việc nào mang id đó, nên phương thức của bạn không trả về gì, và Nest phản hồi với 200 cùng nội dung trống. Hiện tại, đây là kết quả dự kiến. Phản hồi này không cung cấp thông tin gì cho ứng dụng khách, và bài học sau sẽ khắc phục điều đó.
Tự làm thử
import { Controller, Get } 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 },
];
@Get()
findAll(): Task[] {
return this.tasks;
}
}
Tất cả bài học trong TypeScript và NestJS
1Nest cơ bản
Lớp và phương thứcXin chào, NestĐăng ký controller4Bộ bảo vệ, bộ lọc và bộ đánh chặn
Bộ bảo vệTự luyện tập: Playground Express