Nest JS - доступ к значению конфигурации вне модуля dir - PullRequest
0 голосов
/ 11 апреля 2020

Я занимаюсь разработкой проекта Nest JS. А вот моя структура проекта:

-src
 -config
  -configuration.ts
 -modules
  -auth
  -user
 -utils
  -util.ts

И в моем модуле аутентификации и пользователя я импортирую ConfigModule, а затем я могу использовать ConfigService для получения значений конфигурации из файла configuration.ts. Но если я хочу получить значения конфигурации в файле utils/util.ts, я не знаю, как это сделать. Потому что это просто dir, который содержит некоторые вспомогательные файлы вместо dir модуля.

1 Ответ

0 голосов
/ 11 апреля 2020

Предполагая, что вы хотите использовать один и тот же экземпляр ConfigService ... С точки зрения гнезда JS , я вижу два варианта:

  • Группировать ваши util функционирует в одном провайдере и рассматривается как le git компонент вашего приложения Nest JS (или сгруппируйте их по обязанностям в нескольких провайдеров, это также может иметь больше смысла)
  • Make ваша служба конфигурации доступна в виде node.js модуля, который вы можете импортировать «как есть» из util и объявить как пользовательский Provider из вашего приложения Nest JS.

Относительно вторая опция:

// regular typescript class
// exported so you can type your injected "configService" in other classes
export class ConfigService {
 // your code
}

export default new ConfigService();

Это можно импортировать как * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 101: 1019 *. * *

. * При введении ConfigService в ваше приложение Nest JS значение будет разрешено до configService (если, конечно, ConfigModule находится в области видимости).

Однако , это не позволяет вашему ConfigService вводить что-либо в параметры его конструктора ... Если вы не правы Можно использовать два разных экземпляра ConfigService (один для util, один для вашего приложения Nest JS). В этом случае вы можете использовать провайдера Factory, который выглядит следующим образом:

const configServiceProvider = {
  provide: ConfigService,
  useFactory: (somethingService: SomethingService) => new ConfigService(somethingService),
  inject: [SomethingService],
};

// and in the ConfigModule
@Module({
  imports: [SomethingModule], // so you can inject SomethingService
  providers: [configServiceProvider],
  exports: [configServiceProvider],
})
export class ConfigModule {}

Но это не имеет особого смысла, так как вам также понадобятся зависимости ConfigService available out области действия Nest JS, чтобы использовать его в util функциях.


Другой вариант (не принимая во внимание какие-либо рамки) будет состоять в том, чтобы позволить себе проходить (по параметру ) ConfigService в вашем util ... например:

// old version
export const readDeploymentConfigFile = (filePath: string) => {
  // ...
};

// new version
export const readDeploymentConfigFile = (configService: ConfigService) => (filePath: string) => {
  // ...
};

Это видео может быть вдохновляющим ("Dead-Simple Inpendency Injection" Рунара Шли Бьярнасона , 2012), даже если это не относится ни к TypeScript, ни к Nest.

Но это не идеально для использования в качестве API, и это может также выявить некоторый дизайн fl aws ... Если ваш util функциям нужны некоторые динамические / внешние значения конфигурации, можем ли мы все еще рассматривать их как util функции?

...