在 nest.js 中处理第三方依赖项
Posted
技术标签:
【中文标题】在 nest.js 中处理第三方依赖项【英文标题】:Handling third party dependencies in 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
实例?
【问题讨论】:
【参考方案1】:是的,将 3rd 方依赖项作为自定义提供程序注入是可行的方法。您可以使用异步工厂函数来注入设置配置所需的依赖项。这样,您将拥有一个已配置的实例。
这是我最近做的一个例子:
import Telegraf from 'telegraf';
// ...
providers: [
provide: Telegraf,
useFactory: async (configService: ConfigService) =>
return new Telegraf(configService.telegramToken);
,
inject: [ConfigService],
,
]
根据您的要求,为您的依赖项创建一个新模块以重新导出您的提供程序可能是有意义的。除了直接导出您的 3rd 方实例,您还可以创建一个封装依赖项的外观服务。这样,以后更换库就变得更容易了。
【讨论】:
以上是关于在 nest.js 中处理第三方依赖项的主要内容,如果未能解决你的问题,请参考以下文章
Nest.js 无法解决对 TestingModule 的循环依赖
NestJS 错误:错误:Nest 无法解析 AuthService (?, JwtService) 的依赖项