Giá trị cấu hình
Thuộc phần TypeScript và NestJS trong hành trình Node.js của Coddy. Bài học 12 trên 24.
GET /tasks sắp trả về các nhiệm vụ theo từng trang, như trong phần 3. Số nhiệm vụ trên mỗi trang là một thiết lập, nên giá trị này cần lấy từ môi trường thay vì ghi trực tiếp vào code. Nhà cung cấp giá trị đăng ký một giá trị bất kỳ bằng một tên gọi là token.
providers: [
{ provide: 'CURRENCY', useValue: process.env.CURRENCY ?? 'EUR' },
],
constructor(@Inject('CURRENCY') private readonly currency: string) {}Chuỗi không có lớp để Nest đọc từ kiểu của tham số, nên @Inject('CURRENCY') chỉ định token. Token phải được viết giống hệt ở cả hai nơi: lỗi chính tả sẽ khiến ứng dụng dừng với lỗi "can't resolve dependencies". Giá trị môi trường luôn là chuỗi; hãy chuyển đổi chúng bằng Number() khi bạn cần một số.
Thử thách
DễBước này mở dự án theo dõi công việc Nest đã chuẩn bị sẵn cho khóa học, thay vì các tệp dự án của bạn từ A Second Module (bao gồm src/stats/stats.module.ts). Phần việc bạn đã làm trước đó vẫn nằm trong bài học riêng. Đọc các tệp được cung cấp trước khi chỉnh sửa src/tasks/tasks.module.ts. Bản này có dịch vụ Nest và module thống kê, cùng với code phân trang đã được cung cấp.
Dự án theo dõi công việc đã chuẩn bị sẵn này bổ sung chức năng phân trang cho GET /tasks. Trong src/tasks/tasks.module.ts, đăng ký một provider giá trị có tên PAGE_SIZE. Đọc giá trị môi trường, dùng giá trị mặc định là 10 nếu không có và chuyển giá trị đó thành số.
Trong src/tasks/tasks.controller.ts, xóa trường pageSize cố định. Nhận provider trong hàm khởi tạo dưới dạng trường số private readonly có tên pageSize. Dùng @Inject với tên token chính xác; phần import và code phân trang đã được cung cấp.
Hãy thử: Chạy sẽ cung cấp PAGE_SIZE=2. GET /tasks trả về hai phần tử, trang 1, tổng cộng 3 và 2 trang. GET /tasks?page=2 trả về công việc còn lại. Nếu không có biến môi trường đó, mỗi trang mặc định có mười phần tử.
Tự làm thử
import { Module } from '@nestjs/common';
import { ClockService } from './clock.service';
import { TasksController } from './tasks.controller';
import { TasksService } from './tasks.service';
@Module({
controllers: [TasksController],
providers: [TasksService, ClockService],
exports: [TasksService],
})
export class TasksModule {}
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ệ2Nhà cung cấp
Đầu vào của hàm khởi tạoMột dịch vụĐăng ký nhà cung cấpTự luyện tập: Playground Express