为不同的Pouchdb实例创建typescript单例

时间:2018-01-16 00:21:11

标签: node.js typescript pouchdb

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

类别:

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()

我注意到在此设置中,Users数据库正在多次初始化。我认为我需要解决的是Singleton。我理解我是单身人士,但在这种情况下使用一个是很困难。

非常感谢任何帮助或指导。

1 个答案:

答案 0 :(得分:1)

看起来你不一定需要单例,你可以使用地图(也可能只是一个对象)将数据库实例存储在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> {} } 的静态字段中:

<input type="button" value="1" onclick="display()">
function display(e){
    e = e || window.event;
    e = e.target || e.srcElement   
    screen.value += e.value; //e.value contains the value of the button      
}

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