如何使用JSON数据初始化多个nestjs提供程序?

时间:2020-06-17 21:54:25

标签: javascript node.js typescript backend nestjs

我是NestJS的新手,正在创建一个应用程序。我的应用程序利用了MVC架构,例如有多个模块

Project
 |
 +-- App.Controller
 +-- App.Service
 +-- App.Module
 |    
 +-- SubModule1
 |  |  
 |  +-- SubModule1.Controller
 |  +-- SubModule1.Service
 |  +-- SubModule1.Module
 |    
 +-- SubModule2
 |  |  
 |  +-- SubModule2.Controller
 |  +-- SubModule2.Service
 |  +-- SubModule2.Module
 |
 +-- SubModule3
 |  |  
 |  +-- SubModule3.Controller
 |  +-- SubModule3.Service
 |  +-- SubModule3.Module

现在我的每个子模块服务类都有一个数据成员

private member: string[] = []

我想用我存储在json文件中的一些数据初始化这些类成员。我的json结构就是这样

{
    'SubModule1' : [
        string1,
        string2,
        string3,
        ...
        stringN
    ], 
    'SubModule2' : [
        string1,
        string2,
        string3,
        ...
        stringN
    ], 
    'SubModule3' : [
        string1,
        string2,
        string3,
        ...
        stringN
    ]
}

任何人都可以指导我正确的方法吗?我应该在哪里加载json,然后注入数据?我最初的想法是利用app.service类来加载和注入数据,但是我不确定如何访问子模块提供程序。

任何指导或帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:1)

要在应用程序启动期间初始化数据,可以使用lifecycle events之一,例如OnModuleInit

@Injectable()
export class MyService implements OnModuleInit {
  onModuleInit() {
    await initializeData()
  }
}

如果您想为具有相同结构的许多提供程序重复执行此操作,则可以从初始化类扩展,如下所示:

abstract class DataInitializer implements OnModuleInit {
  member: string[];
  onModuleInit() {
    const jsonData = // ...
    this.member= jsonData[this.constructor.name];
  }
}

@Injectable()
export class AppService extends DataInitializer {
  // ...