【问题标题】:Handling third party dependencies in nest.js在 nest.js 中处理第三方依赖项
【发布时间】:2019-05-30 00:12:29
【问题描述】:

在nest中如何处理第三方依赖项(即不以nest-module形式出现的依赖项)的最佳实践是什么?

例如,我在自己的日志模块中直接使用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 ... */
    }
}

现在我知道 Nest 的架构深受 Angular 的影响,我找到了this article explaining how to deal with 3rd party dependencies in angular。同样的想法也适用于巢吗?我应该为morgan 创建一个自定义提供程序并注入它吗?我是只注入 morgan 导入,还是注入已配置的 morgan 实例?

【问题讨论】:

    标签: typescript dependency-injection nestjs


    【解决方案1】:

    是的,将 3rd 方依赖项作为自定义提供程序注入是可行的方法。您可以使用异步工厂函数来注入设置配置所需的依赖项。这样,您将拥有一个已配置的实例。

    这是我最近做的一个例子:

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

    根据您的要求,为您的依赖项创建一个新模块以重新导出您的提供程序可能是有意义的。除了直接导出您的 3rd 方实例,您还可以创建一个封装依赖项的外观服务。这样,以后更换库就变得更容易了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 2018-12-09
      • 2019-02-08
      • 2017-04-14
      • 1970-01-01
      • 2021-10-10
      • 2020-05-27
      相关资源
      最近更新 更多