typeorm核心之ConnectionManager类

羊舌高峰
2023-12-01
 
 

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方法),并且提供了根据名称获取的方法,注意不能连接一个已存在且已连接的连接

 类似资料: