我们可以在 Nestjs 中使用所有节点 npm 包吗

Pan*_*ary 5 node.js npm nestjs

目前,我正在学习 Nestjs,我发现 Nestjs 有自己的 npm 包列表,如 @nestjs/cqrs、@nestjs/jwt 等。所有包的完整列表是 https://www.npmjs.com/org/嵌套。现在我怀疑我们是否可以使用我们在任何 Node.js 应用程序(如 morgan、windston 等)中使用的 nestjs 中的所有 npm 包。或者我们只能使用 nestjs 文档列表中提到的包。

Pre*_*ton 6

首先,node.js 包可以在 Nestjs 中使用它的自定义 provider。所以请参阅当前的文档。

其次,Nestjs 核心团队的 Brunner 在 Nestjs_framework Reddit 上帮助我解决了这个问题。他在Github上为我们做了一个很好的简短例子。我让他将名称从 reddit 更改为 node,以便断开此链接,但您可以在他的 Github 站点上找到它。他值得称赞。

我们不应该链接到 SO 上的解决方案。让我们开始吧。

Brunner 改变了我的架构,我喜欢他的方法。我想使用没有 Nestjs 模块的 Cloudinary Node SDK。这应该适用于导入任何 Node 包,至少这是我的理解。

注意:当您编写 this.cloudinary 时。您希望在 '.' 之后看到一个方法列表。. 你不会,所以只需使用 SDK 或包文档告诉你使用的任何代码。有点奇怪。

Cloudinary 组件位于我的 members 目录中的一个文件夹中,其中导入了一堆模块。

cloudinary.module.ts

import { Module } from '@nestjs/common';
import { cloudinaryProvider } from './cloudinary.provider';
import { CloudinaryService } from './cloudinary.service';

@Module({
  providers: [cloudinaryProvider, CloudinaryService],
  exports: [cloudinaryProvider],
})

export class CloudinaryModule {}
Run Code Online (Sandbox Code Playgroud)

cloudinary.provider.ts

import { Provider } from '@nestjs/common';
import * as CloudinaryLib from 'cloudinary';

export const Cloudinary = 'lib:cloudinary';

export const cloudinaryProvider: Provider = {
  provide: Cloudinary,
  useValue: CloudinaryLib,
};
Run Code Online (Sandbox Code Playgroud)

cloudinary.service.ts

import { Injectable, Inject } from '@nestjs/common';
import { Cloudinary } from './cloudinary.provider';

@Injectable()
export class CloudinaryService {

  constructor(
    @Inject(Cloudinary) private cloudinary
  ) {
    // console.log('This is the cloudinary instance:');
    // console.log(this.cloudinary);
  }
}
Run Code Online (Sandbox Code Playgroud)

最后是父模块:

members.module.ts

import { CloudinaryModule } from './cloudinary/cloudinary.module'

@Module({
  imports: [
    CloudinaryModule,
    ...
Run Code Online (Sandbox Code Playgroud)