Значения конфигурации
Часть раздела TypeScript и NestJS путешествия по Node.js на Coddy. Урок 12 из 24.
GET /tasks собирается возвращать задачи постранично, как в разделе 3. Количество задач на странице задаётся настройкой, поэтому его следует получать из окружения, а не указывать в коде. Поставщик значения регистрирует любое значение под именем, которое называется токеном.
providers: [
{ provide: 'CURRENCY', useValue: process.env.CURRENCY ?? 'EUR' },
],
constructor(@Inject('CURRENCY') private readonly currency: string) {}У строки нет класса, который Nest может определить по типу параметра, поэтому @Inject('CURRENCY') указывает токен. В обоих местах он должен быть написан одинаково: опечатка остановит приложение с ошибкой «не удаётся разрешить зависимости». Значения окружения всегда являются строками; когда нужно получить число, преобразуйте их с помощью Number().
Задание
ЛегкоНа этом шаге открывается подготовленный для курса проект трекера задач на Nest, а не файлы твоего проекта из урока «Второй модуль» (включая src/stats/stats.module.ts). Твоя предыдущая работа остаётся в своём уроке. Прочитай предоставленные файлы, прежде чем редактировать src/tasks/tasks.module.ts. Эта копия содержит сервис Nest и модуль статистики, а код пагинации уже предоставлен.
В этот подготовленный трекер задач добавлена пагинация для GET /tasks. В src/tasks/tasks.module.ts зарегистрируй провайдер значения с именем PAGE_SIZE. Считай значение из окружения, если оно отсутствует — используй значение по умолчанию 10, и преобразуй его в число.
В src/tasks/tasks.controller.ts удали поле pageSize с фиксированным значением. Получи провайдер в конструкторе как приватное поле только для чтения числового типа с именем pageSize. Используй @Inject с точным именем токена; импорт и код пагинации уже предоставлены.
Попробуй: команда Run задаёт PAGE_SIZE=2. GET /tasks возвращает два элемента, страницу 1, всего 3 элемента и 2 страницы. GET /tasks?page=2 возвращает оставшуюся задачу. Без этой переменной окружения по умолчанию выводится десять элементов на страницу.
Попробуйте сами
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