模块@Module
每个Nest应用程序至少有一个模块,即根模块。根模块是 Nest 开始安排应用程序树的地方。事实上,根模块可能是应用程序中唯一的模块,特别是当应用程序很小时,但是对于大型程序来说这是没有意义的。在大多数情况下,您将拥有多个模块,每个模块都有一组紧密相关的功能。
1.基本用法
当我们使用nest g res user 创建一个CURD 模板的时候 nestjs 会自动帮我们引入模块
2.共享模块
例如user的Service想暴露给 其他模块使用就可以使用exports导出该服务
由于App.modules已经引入过该模块,就可以直接使用user模块的Service
3.全局模块
@Global()
我们给user模块添加@Global(),它便注册为全局模块
在list模块使用无须再去list.module.ts中导入,直接在list.controller中使用即可
4.动态模块
动态模块主要就是为了给模块传递参数,可以给该模块添加一个静态方法用来接受参数,返回的对象里面module,providers,exports都是必须的,且module的值要跟模块名称一致。
import { DynamicModule, Global, Module } from "@nestjs/common";
interface Options {
path: string
}
@Global()
@Module({
})
export class ConfigModule {
static forRoot(options: Options): DynamicModule {
return {
module: ConfigModule,
providers: [
{
provide: "Config",
useValue: { baseApi: "/api" + "/" + options.path }
},
],
exports: [
{
provide: "Config",
useValue: { baseApi: "/api" + "/" + options.path }
}
]
}
}
}
注意,自定义的值也是需要导出的
要在app.module中进行引入
注意,无论当前模块是不是全局模块,一律都需要在app.module进行引入,因为app.mudule是根模块
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
import { ListModule } from './list/list.module';
import { ConfigModule } from './config/config.module';
@Module({
imports: [UserModule, ListModule, ConfigModule.forRoot({
path:'zl'
})],
controllers: [AppController],
providers: [AppService],
})
export class AppModule { }
在app.controller中使用
结果
静态写法,直接在Module里面写,值写死,不让动态传递参数
import { DynamicModule, Global, Module } from "@nestjs/common";
interface Options {
path: string
}
@Global()
@Module(
{
providers:[
{
provide:'Config',
useValue:'zl'
}
],
exports:[
{
provide:'Config',
useValue:'zl'
}
]
}
)
export class ConfigModule {
}