Menu
CoddyTech

Значения конфигурации

Часть раздела 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().

challenge icon

Задание

Легко

На этом шаге открывается подготовленный для курса проект трекера задач на 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