Как я могу инициализировать множественное гнездо js провайдера с данными из JSON? - PullRequest
1 голос
/ 18 июня 2020

Я новичок в Nest JS и создаю приложение. Мое приложение использует архитектуру 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 Ответ

1 голос
/ 19 июня 2020

Для инициализации данных во время запуска вашего приложения вы можете использовать одно из событий жизненного цикла , например 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 {
  // ...
...