Menu
CoddyTech

配置值

本课属于 Coddy Node.js 学习旅程的“TypeScript 和 NestJS”单元。第 12 课,共 24 课。

GET /tasks 即将像第 3 单元中那样,每次返回一页任务。每页能放多少个任务是一项设置,因此应该从环境中读取,而不是直接写进代码。值提供者会以一个名称注册任意值,这个名称称为令牌。

providers: [
    { provide: 'CURRENCY', useValue: process.env.CURRENCY ?? 'EUR' },
],

constructor(@Inject('CURRENCY') private readonly currency: string) {}

字符串没有类可供 Nest 从参数的类型中读取,因此需要用 @Inject('CURRENCY') 指定令牌。两处的拼写必须完全相同:如果拼错,应用就会因“无法解析依赖项”错误而停止。环境变量的值始终是字符串;需要数字时,用 Number() 将它们转换为数字。

challenge icon

挑战

简单

此步骤会打开课程中准备好的 Nest 任务跟踪项目,而不是你在A Second Module中的项目文件(包括 src/stats/stats.module.ts)。之前的工作仍保留在原来的课中。编辑 src/tasks/tasks.module.ts 前,请先阅读提供的文件。此副本包含 Nest 服务和 stats 模块,并已提供分页代码。

这个准备好的任务跟踪项目为 GET /tasks 添加了分页。在 src/tasks/tasks.module.ts 中,注册一个名为 PAGE_SIZE 的值提供者。读取环境变量的值,如果未设置,则默认为 10,并将其转换为数字。

在 src/tasks/tasks.controller.ts 中,删除固定的 pageSize 字段。在构造函数中接收该提供者,并将其声明为名为 pageSize 的 private readonly 数字字段。使用 @Inject 并指定完全一致的令牌名称;导入语句和分页代码已提供。

试试看:“运行”会设置 PAGE_SIZE=2。GET /tasks 会返回两项,page 为 1,total 为 3,pages 为 2。GET /tasks?page=2 会返回剩余的任务。未设置此环境变量时,每页默认显示 10 项。

亲手试试

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 {}

TypeScript 和 NestJS中的所有课

自己练习: Express 在线编辑器