src/connection/ConnectionManager.ts
//连接管理器
export class ConnectionManager {
//管理的连接数组
protected readonly connections: Connection[] = [];
//是否包含指定名称链接
has(name: string): boolean {
return !!this.connections.find(connection => connection.name === name);
}
//获取指定名称连接,连接不存在抛出异常
get(name: string = "default"): Connection {
const connection = this.connections.find(connection => connection.name === name);
if (!connection)
throw new ConnectionNotFoundError(name);
return connection;
}
//根据连接选项创建连接,注意ConnectionManager创建的连接都没有执行connect方法,只有通过根方法createConnection创建才会执行
create(options: ConnectionOptions): Connection {
//指定选项中name是否已被注册
const existConnection = this.connections.find(connection => connection.name === (options.name || "default"));
//如果指定名称连接已存在
if (existConnection) {
//如果连接存在而且已被连接,抛出异常
if (existConnection.isConnected)
throw new AlreadyHasActiveConnectionError(options.name || "default");
//如果它已经关闭,则删除这个连接,等会重新连接
this.connections.splice(this.connections.indexOf(existConnection), 1);
}
//使用选项创建连接
const connection = new Connection(options);
//添加到数组
this.connections.push(connection);
return connection;
}
}
可以看到连接管理器,只是存储了指定连接(没有执行connect方法),并且提供了根据名称获取的方法,注意不能连接一个已存在且已连接的连接