模块(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 { }