Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何更好地处理从服务导出方法?_Node.js_Typescript_Design Patterns_Adonis.js - Fatal编程技术网

Node.js 如何更好地处理从服务导出方法?

Node.js 如何更好地处理从服务导出方法?,node.js,typescript,design-patterns,adonis.js,Node.js,Typescript,Design Patterns,Adonis.js,我正试图找出一种更好的方法来组织我的代码库(我的服务)。 现在我有一个用于我的服务的文件夹和一个类(比如AuthService.ts),里面有我的方法(例如:registerUser、loginUser) 我打算做这样的事情: // AuthService/registerUser.ts class RegisterUser { public async handler (userData: UserData) { // code to register user retur

我正试图找出一种更好的方法来组织我的代码库(我的服务)。 现在我有一个用于我的服务的文件夹和一个类(比如AuthService.ts),里面有我的方法(例如:registerUser、loginUser)

我打算做这样的事情:

// AuthService/registerUser.ts
class RegisterUser {
  public async handler (userData: UserData) {
    // code to register user
    return user
  }
}
export default new RegisterUser().handler

// ./AuthService/loginUser.ts
class LoginUser {
  public async handler (userData: UserCredentials) {
    // code to login user 
    return {user, token}
  }
}
export default new LoginUser().handler

// ./AuthService/index.ts
import loginUser from './loginUser'
import registerUser from './registerUser'
export default {loginUser, registerUser}

// Controller
import AuthService from 'App/Services/AuthService'
export default class SessionsController {
public async register ({ request }: HttpContextContract) {
    const { name, email, password } = request.post()
    const user = await AuthService.registerUser({ name, email, password })
    if (!user) {
      console.log('failed!?')
    }
    return { user }
  }
}
我把我所有的方法都分成了新的类。我制作了一个
index.ts
文件,以便于导出所有这些方法(不要破坏我的旧实现),但我可以只导入我需要的特定方法,而不是所有服务

这是在AdonisJSV5上编写的,但真正的疑问在于结构、导入/导出和体系结构


这种方法有什么问题吗?使用多种方法更好地组织服务的正确方法应该是什么?(这是一个例子,实际上还有4种方法..还有一些方法..

I.
这种方法有什么问题吗?

->

除了作为类导出器的方法的一个小问题

export default new ClassName()。方法
意味着每当您执行
import
,应用程序都会创建一个新的
ClassName
实例。正如我所说,这不是一个真正的大问题,但请考虑以下两种解决方案:

  • 注册一个应用程序
    singleton
    ->我想我们不需要:D
  • 如果您可以处理没有非静态属性的事情,请使用静态方法。然后导出应该是
    export default ClassName.method
II<代码>使用多种方法更好地组织服务的正确方法是什么?

->我不确定:D但下面是我如何做到的。它和你的相似

结构:

  Services
  |-- Service1
  |--|-- method1AsClass.ts
  |--|-- method2AsClass.ts
  |--|-- index.ts

方法采用经典方法

class methodAsClassX {
  static attr1: <type>;

  private static async helper1 () {
    // code. Eg:
    fn(MethodAsClassX.attr1) 
  }

  private static async helper1 () {
     // code
  }

  public static async invoke (param: <Param1DataType>) {
    // code
    return result
  }
}
export default methodAsClassX.invoke
用法:

import Service1 from 'App/Services/Service1'
or
import {method1} from 'App/Services/Service1'
import Service1 from 'App/Services/Service1'
or
import {method1} from 'App/Services/Service1'