nest.js动态模块
我理解nestjs动态模块主要是为模块注解提供运行时获得动态信息的能力,例如配置信息
在typescript编译为js后,typescript的注解实际为一个在文件加载时候的代码,如果我们希望读取配置文件信息,然后提供给模块配置,那么这个时候访问配置信息会是null,因为注解生成的代码会在我们执行读取配置信息代码之前。
例如我们需要读取mongodb的链接字符
@Module({ imports: [
TypeOrmModule.forRoot({
type: "mongodb",
useNewUrlParser: true,
useUnifiedTopology: true,
url: Config.DB, // 读取数据库配置
entities: [join(__dirname, "../**/**.entity{.ts,.js}")], // 扫描整个目录
synchronize: true,
}),
],
providers: [],
controllers: [],
exports: [],
}
class DBModule {
}
这种静态方式的注解,Config.DB
会是null
,因为编译后注解代码会在读取配置信息前执行。
nestjs采取一个静态方法,返回DynamicModule类型对象,在注解上调用这个方法实现动态模块。
@Module({}) class DBModule {
// 使用nestjs动态模块, 读取配置文件,注册module的时候需要调用register()
static register(): DynamicModule {
InitConfig(); // 读取配置信息
return {
imports: [
TypeOrmModule.forRoot({
type: "mongodb",
useNewUrlParser: true,
useUnifiedTopology: true,
url: Config.DB, // 读取数据库配置
entities: [join(__dirname, "../**/**.entity{.ts,.js}")], // 扫描整个的目录
synchronize: true,
}),
TypeOrmModule.forFeature([]),
],
module: CoreModule,
providers: [],
exports: [],
};
}
}
以动态模块方式,在其他模块import
这个DBModule
的时候就可以运行 InitConfig()
读取配置信息。
nestjs动态模块文档
以上是 nest.js动态模块 的全部内容, 来源链接: utcz.com/z/512824.html