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

最佳答案

首先,可以在 Nestjs 中使用 node.js 包及其 custom 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 {}

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,
};

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);
  }
}

最后是父模块:

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

@Module({
  imports: [
    CloudinaryModule,
    ...

关于node.js - 我们可以在 Nestjs 中使用所有 Node npm 包吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57404341/

10-09 21:08