美文网首页
nestjs模块exports理解

nestjs模块exports理解

作者: cijian | 来源:发表于2021-11-17 17:30 被阅读0次

模块(Module)是一个使用了 @Module() 装饰的类。@Module() 装饰器提供了一些 Nest 需要使用的元数据,用来组织应用程序的结构。

@Module({
  imports: [],  //需要注册哪些模块
  controllers: [], // 需要注册哪些控制器
  providers: [], // 需要注册哪些服务
  exports: [] //导出哪些服务
})

使用模块导出exports

contants/module.ts

@Module({
  imports: [TypeOrmModule.forFeature([ConstantEntity])],
  controllers: [ConstantController],
  providers: [ConstantService],
  exports: [ConstantService] //注意点1.1 如果这里到导出ConstantService
})
export class ConstantModule { }

home/module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { HomeController } from './controller';

@Module({
  imports: [ConstantModule], //注意点1.2 注册了ConstantModule模块
  controllers: [HomeController]
})
export class HomeModule { }

home/controller.ts

import { Controller, Post, Inject, Body } from '@nestjs/common';
import { ApiResponse, ApiProperty } from '@nestjs/swagger';
import { ConstantService } from '@@/constant/service';

@Controller('mall/home')
export class HomeController {

  @Inject()
  constantService: ConstantService // 注意点1.3 我们可以直接注入ConstantService服务

  @Post('getConstantList')
  async getConstantList() {
    return await this.constantService.getList();
  }
}

现在我们将exports: [ConstantService]干掉

contants/module.ts

@Module({
  imports: [TypeOrmModule.forFeature([ConstantEntity])],
  controllers: [ConstantController],
  providers: [ConstantService],
  exports: [] //注意点2.1 干掉导出 ,上面的代码不动,会造成
})
export class ConstantModule { }

报错

Error: Nest can't resolve dependencies of the HomeController. Please make sure that the "constantService" property is available in the current context.

Potential solutions:
- If ConstantService is a provider, is it part of the current HomeModule?
- If ConstantService is exported from a separate @Module, is that module imported within HomeModule?
  @Module({
    imports: [ /* the Module containing ConstantService */ ]
  })

    at Injector.lookupComponentInParentModules (/Users/fdg/git/xuebao/auto-ui-server/node_modules/@nestjs/core/injector/injector.js:201:19)
    at process.runNextTicks [as _tickCallback] (internal/process/task_queues.js:54:5)
    at Function.Module.runMain (internal/modules/cjs/loader.js:828:11)
    at internal/main/run_main_module.js:17:11
    at Injector.resolveComponentInstance (/Users/fdg/git/xuebao/auto-ui-server/node_modules/@nestjs/core/injector/injector.js:156:33)
    at /Users/fdg/git/xuebao/auto-ui-server/node_modules/@nestjs/core/injector/injector.js:259:38
    at async Promise.all (index 0)
    at Injector.resolveProperties (/Users/fdg/git/xuebao/auto-ui-server/node_modules/@nestjs/core/injector/injector.js:250:27)
    at callback (/Users/fdg/git/xuebao/auto-ui-server/node_modules/@nestjs/core/injector/injector.js:47:32)
    at Injector.resolveConstructorParams (/Users/fdg/git/xuebao/auto-ui-server/node_modules/@nestjs/core/injector/injector.js:124:24)

我们继续使用注意点2.1代码,才能解决上面错误
修改
home/controller.ts

@Module({
  imports: [TypeOrmModule.forFeature([ConstantEntity])],
  controllers: [HomeController],
  providers: [ConstantService], //注意点2.2 单独引入ConstantService
})
export class HomeModule { }

相关文章

网友评论

      本文标题:nestjs模块exports理解

      本文链接:https://www.haomeiwen.com/subject/odaltrtx.html