РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsSpDmRM 19 of 201 menu
◀ ▶

Повторное использование модуля в Nest

Пусть опубликованные записи и черновики читают из разных каталогов, а код модуля темы один. Если дважды записать один и тот же токен, значения в контейнере смешаются.

Каждый вызов статического метода настройки создаёт отдельный экземпляр модуля со своим списком провайдеров. Имена токенов в provide должны различаться, тогда два каталога живут рядом без конфликта. У каждого адреса свой контроллер и свой токен.

Покажем на примере постов. Расширим метод настройки полем имени токена:

import { DynamicModule, Module, Type } from '@nestjs/common'; @Module({}) export class PostsModule { static register(options: { folder: string; token: string; controller: Type; }): DynamicModule { return { module: PostsModule, controllers: [options.controller], providers: [ { provide: options.token, useValue: options.folder, }, ], exports: [options.token], }; } }

Первый контроллер вернёт каталог опубликованных записей:

import { Controller, Get, Inject } from '@nestjs/common'; @Controller('posts') export class PostController { folder: string; constructor(@Inject('POSTS_FOLDER') folder: string) { this.folder = folder; } @Get() getFolder(): string { return this.folder; } }

Второй контроллер покажет каталог черновиков по другому токену:

import { Controller, Get, Inject } from '@nestjs/common'; @Controller('drafts') export class DraftController { folder: string; constructor(@Inject('DRAFTS_FOLDER') folder: string) { this.folder = folder; } @Get() getFolder(): string { return this.folder; } }

Корень подключит модуль темы два раза с разными парами токена и папки:

import { Module } from '@nestjs/common'; import { DraftController } from './posts/draft.controller.js'; import { PostController } from './posts/post.controller.js'; import { PostsModule } from './posts/posts.module.js'; @Module({ imports: [ PostsModule.register({ folder: 'posts', token: 'POSTS_FOLDER', controller: PostController, }), PostsModule.register({ folder: 'drafts', token: 'DRAFTS_FOLDER', controller: DraftController, }), ], }) export class AppModule {}

Подключите WorkersModule дважды с разными токенами каталога и верните каждую строку из своего WorkerController и ArchiveController.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить