Обработка сторонних зависимостей в nest.js - PullRequest
0 голосов
/ 03 января 2019

Каков наилучший способ обработки сторонних зависимостей (т. Е. Зависимостей, которые не имеют форму nest-модуля) в nest?

Например, я использую morgan в своем собственном модуле регистрации напрямую, импортируя его в соответствующий файл:

import { Injectable, MiddlewareFunction, NestMiddleware } from '@nestjs/common';
import * as morgan from 'morgan';

@Injectable()
export class NestLoggingMiddleware implements NestMiddleware {

    resolve(...args: any[]): MiddlewareFunction {
        /** use morgan here, e.g. wrap it in a custom middleware ... */
    }
}

Теперь я знаю, что архитектура гнезда находится под сильным влиянием Angular, и я нашел эту статью, объясняющую, как обращаться с зависимостями сторонних производителей в angular . Применима ли та же идея к гнезду? Должен ли я создать собственный провайдер для morgan и внедрить его? И нужно ли вводить только импорт morgan или уже настроенный экземпляр morgan?

1 Ответ

0 голосов
/ 03 января 2019

Да, внедрение сторонних зависимостей в качестве пользовательских провайдеров - это путь. Вы можете использовать асинхронную фабричную функцию для внедрения зависимостей, необходимых для конфигурации установки. Таким образом, у вас будет уже настроенный экземпляр.

Это пример того, что я недавно сделал:

import { Telegraf } from 'telegraf';

// ...

providers: [
  {
    provide: Telegraf,
    useFactory: async (configService: ConfigService) => {
      return new Telegraf(configService.telegramToken);
    },
    inject: [ConfigService],
  },
]

В зависимости от ваших требований, возможно, имеет смысл создать новый модуль для вашей зависимости, который реэкспортирует вашего провайдера. Вместо непосредственного экспорта своего стороннего экземпляра вы также можете создать фасадный сервис, который инкапсулирует зависимость. Таким образом, в более поздний момент становится проще обменивать библиотеку.

...