typescript - 在 nest.js 中处理第三方依赖项
问题描述
关于如何在嵌套中处理第三方依赖项(即不以嵌套模块形式出现的依赖项)的最佳实践是什么?
例如,我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 的影响,我发现这篇文章解释了如何处理 angular 中的 3rd 方依赖项。同样的想法也适用于巢吗?我应该为它创建一个自定义提供程序morgan
并注入它吗?我是只注入morgan
导入,还是注入已经配置的morgan
实例?
解决方案
是的,将 3rd 方依赖项作为自定义提供程序注入是要走的路。您可以使用异步工厂函数来注入设置配置所需的依赖项。这样,您将拥有一个已配置的实例。
这是我最近做的一个例子:
import { Telegraf } from 'telegraf';
// ...
providers: [
{
provide: Telegraf,
useFactory: async (configService: ConfigService) => {
return new Telegraf(configService.telegramToken);
},
inject: [ConfigService],
},
]
根据您的要求,为您的依赖项创建一个新模块以重新导出您的提供程序可能是有意义的。除了直接导出您的 3rd 方实例,您还可以创建一个封装依赖项的外观服务。这样,以后更换库就变得更容易了。
推荐阅读
- android - 长按隐藏工具栏
- python - 如何在 python 中正确预测近期的值?
- python - 如何将余数添加到现有整数?
- arrays - 当我在主函数之外初始化结构成员时,为什么这个 c 程序会出错?
- java - 从嵌套数组中打印/查找元素
- ms-project - Project Server 使用 ReST API 移动/重新排序任务
- reactjs - TypeError:无法读取 loadImage 处未定义的属性“url”
- python - 我如何在 python 中将 math.cos 函数用于 list 或 arange
- typescript - Typescript 如何选择和组合嵌套类型作为根类型
- reactjs - 在 React-Beautiful-DnD 中拖放树项目