Модульный поставщик услуг node.js - PullRequest
0 голосов
/ 27 марта 2020

Итак, у меня есть поставщик услуг, который я хочу разбить на модули, но не могу обдумать решение, есть ли правильный способ сделать это?

const module= use('module')

class Class{
  constructor (Config) {
    this.Config = Config
    this.module= module
  }

  async login() {
    try {
      this.module.login()
    } catch (error) {
      throw error
    }
  }

  async logout() {
    try {
      await this.module.logout()
    } catch (error) {
      throw error
    }
  }

  async foo(){
    try {

        await this.login()

        const account = this.module.createAccount()

        await this.logout()

        return account
    } catch (error) {
      throw error
    }
  }

Я бы хотел иметь несколько модулей: auth. js и account. js и т. д., к которым я мог бы получить доступ из своего класса, не теряя экземпляр модуля, потому что я не могу вызывать свои методы, не выполняя часть login ().

вот так:

const module = use('module')
const AccountModule= use('./account-module.js')
const AuthModule= use('./auth-module.js')

class Class{
  constructor (Config) {
    this.Config = Config
    this.auth = AuthModule(module)
    this.accountModule = AccountModule(module, this.auth)
  }

  async bar() {
    try {
      const account = await this.accountModule.foo()
      return account
    } catch (error) {
      throw error
    }
  }

}

auth-module.js

export default module => ({
  async login() {
    try {
      module.login()
    } catch (error) {
      throw error
    }
  },

  async logout() {
    try {
      await module.logout()
    } catch (error) {
      throw error
    }
  }
})

account-module.js

export default (module,auth) => ({
  async foo(){
    try {

        await auth.login()

        const account = module.createAccount()

        await auth.logout()

        return account
    } catch (error) {
      throw error
    }
  }
})
...