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

时间:2019-08-08 02:17:07

标签: node.js npm nestjs

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

3 个答案:

答案 0 :(得分:0)

Nest是一个在HTTP适配器之上运行的框架(我知道的主要两个是FastifyExpress,其中Express是默认适配器) 。如果您要使用的程序包可以与express(例如Morgan)一起使用,那就没问题了。如果您要使用的软件包与平台无关(例如PinoWinston),则没有问题。如果您要使用的软件包用于其他HTTP适配器(例如koa-router),那么您会遇到问题(反例是@hapi/joi,由hapi框架维护者维护) ,但实际上适用于任何事物)。我想到了一些特定于打字稿的软件包class-validatorclass-transformer,但是总的来说,如果该软件包可在任何节点环境下使用,则可以在Nest下使用。如果您对软件包和实现you could always check out the discord有任何疑问,请在此处提问。

答案 1 :(得分:0)

Nest将公开http适配器,以便您可以挂接到它,这是使用morgan&body-parser npm软件包的示例:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ConfigService } from './config/config.service';
import { ConfigModule } from './config/config.module';
import bodyParser from 'body-parser';
import morgan from 'morgan';

async function bootstrap() {

    const app = await NestFactory.create(AppModule);
    const configService = app.select(ConfigModule).get(ConfigService);

    app.use(bodyParser.json());
    app.use(morgan('dev'));
    app.enableCors();

    await app.listen(configService.PORT, () => console.log(`Server listening on port ${configService.PORT}`));
}

bootstrap();

在此实例中,app上方是一个明确的实例。

答案 2 :(得分:0)

首先,可以将Nest.js软件包及其custom provider用于Nestjs。因此,请参阅当前文档。

第二,Nestjs核心团队的Brunner在Nestjs_framework Reddit上帮助了我。他在Github上为我们做了一个很好的简短示例。我要求他将名称从reddit更改为node,以便断开此链接,但是您可以在他的Github网站上找到它。他应得的荣誉。

我们不应该链接到SO解决方案。因此,让我们开始吧。

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

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

Cloudinary组件位于我的成员目录内的文件夹中,该文件夹中导入了一堆模块。

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,
    ...