为不同的 Pouchdb 实例创建打字稿单例

Creating typescript singleton for different Pouchdb instances

我有一个与多个数据库交互的节点应用程序。我创建了一个 class,然后我开始创建不同的数据库(它们在很大程度上具有相同的 CRUD 模式。

Class:

class CRUDService {

  private section: string;
  private pouch: any;

  constructor(section: string) {
    this.section = section;
    this.pouch = new PouchDB('.' + section, pouchOptions);
  }

  public create(data: any): Promise<string> {}

  public retrieve(id: string): Promise<string> {}

  public update(id: any, data: any): Promise<string> {}

  public delete(item: any): Promise<string> {}

  public all(): Promise<string> {}

export {CRUDService};

数据库启动:

function Users() {
  return new CRUDService('users');
}

export {Users};

然后我像这样在整个应用程序中使用它:

import {Users} from 'databases';
const userService = Users();

userService.something()

我注意到在此设置中,用户数据库被初始化了多次。我认为我需要解决的是单身人士。我明白我是单身人士,但在这种情况下我无法使用单身人士。

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

看起来你不一定需要单例,你可以简单地将数据库实例存储在 CRUD Service 中的静态字段中,使用映射(也可以只是一个对象):

class CRUDService {

    private static pouchDb: Map<string, PouchDB> = new Map<string, PouchDB>();

    private section: string;
    private pouch: any;

    constructor(section: string) {
        this.section = section;

        if (!CRUDService.pouchDb.has(this.section)) {
            CRUDService.pouchDb.set(section, new PouchDB('.' + section, pouchOptions));
        }

        this.pouch = CRUDService.pouchDb.get(this.section);
    }

    public create(data: any): Promise<string> {}

    public retrieve(id: string): Promise<string> {}

    public update(id: any, data: any): Promise<string> {}

    public delete(item: any): Promise<string> {}

    public all(): Promise<string> {}
}

当然,您可以将此数据库实例管理分解为另一个 class。