Skip to content

NestJS模块中有三个参数,分别是providers,imports和exports,很多时候经常会搞不清楚他们的具体用途,下面作个简单介绍。

Providers(提供者)

在 NestJS 中,providers 是一种处理业务逻辑的特殊类。它们是模块中的主要组件,用于处理数据存储、服务调用和其他与业务逻辑相关的任务。

typescript
// cat.service.ts

import { Injectable } from '@nestjs/common';

@Injectable()
export class CatService {
  private cats = ['喵喵', '小胡子', '毛茸茸'];

  findAll(): string[] {
    return this.cats;
  }
}
// cat.service.ts

import { Injectable } from '@nestjs/common';

@Injectable()
export class CatService {
  private cats = ['喵喵', '小胡子', '毛茸茸'];

  findAll(): string[] {
    return this.cats;
  }
}

在上面的代码中,CatService 被标记为 @Injectable(),表示它是一个提供者。这个服务简单地返回一个包含一些猫名字的数组。

Imports(导入)

imports 用于将其他模块导入到当前模块。通过 imports,我们可以使用其他模块提供的服务和功能。

typescript
// app.module.ts

import { Module } from '@nestjs/common';
import { CatModule } from './cat/cat.module';

@Module({
  imports: [CatModule],
})
export class AppModule {}
// app.module.ts

import { Module } from '@nestjs/common';
import { CatModule } from './cat/cat.module';

@Module({
  imports: [CatModule],
})
export class AppModule {}

在上面的代码中,AppModule 导入了 CatModule,这样就可以在 AppModule 中使用 CatModule 提供的服务。

Exports(导出)

exports 允许当前模块的功能和服务对其他模块可见。如果一个模块中有一些功能是其他模块可能需要使用的,就可以通过 exports 公开它们。

typescript
// cat.module.ts

import { Module } from '@nestjs/common';
import { CatService } from './cat.service';

@Module({
  providers: [CatService],
  exports: [CatService],
})
export class CatModule {}
// cat.module.ts

import { Module } from '@nestjs/common';
import { CatService } from './cat.service';

@Module({
  providers: [CatService],
  exports: [CatService],
})
export class CatModule {}

在上面的代码中,CatModuleCatService 导出,这样其他模块就可以导入 CatModule 并使用其中提供的服务。

使用示例

现在,让我们将这些概念整合在一起,创建一个使用 CatModule 的简单应用。

typescript
// main.ts

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  const catService = app.get(CatService);
  console.log('所有猫咪:', catService.findAll());
  await app.listen(3000);
}
bootstrap();
// main.ts

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  const catService = app.get(CatService);
  console.log('所有猫咪:', catService.findAll());
  await app.listen(3000);
}
bootstrap();

在上面的代码中,AppModule 使用了 CatModule 提供的服务。当应用启动时,它会打印所有猫咪的名字。