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

回到顶部