Skip to content

Commit c6d8c0c

Browse files
committed
feat(connect): 新增 use() 作为 db() 别名(运行时 + 类型声明)
1 parent c4c2743 commit c6d8c0c

2 files changed

Lines changed: 405 additions & 319 deletions

File tree

lib/connect.js

Lines changed: 82 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -2,82 +2,98 @@
22
* 数据库连接管理器
33
* 统一管理各种数据库的连接创建和实例化逻辑
44
*/
5-
const Mongo = require('./mongodb');
5+
const Mongo = require("./mongodb");
66

77
module.exports = class ConnectionManager {
8+
/**
9+
* 支持的数据库类型映射
10+
*/
11+
static get SUPPORTED_DATABASES() {
12+
return {
13+
mongodb: Mongo,
14+
};
15+
}
816

9-
/**
10-
* 支持的数据库类型映射
11-
*/
12-
static get SUPPORTED_DATABASES() {
13-
return {
14-
'mongodb': Mongo,
15-
};
17+
/**
18+
* 创建数据库实例
19+
* @param {string} type - 数据库类型
20+
* @param {string} databaseName - 数据库名称
21+
* @param {Object} cache - 缓存实例(内存缓存)
22+
* @param {Object} logger - 日志记录器
23+
* @param {Object} [defaults] - 统一默认配置(如 maxTimeMS、namespace)
24+
* @returns {Object} 数据库实例
25+
* @throws {Error} 当数据库类型不支持或未实现时抛出错误
26+
*/
27+
static createInstance(type, databaseName, cache, logger, defaults) {
28+
const SUPPORTED_DATABASES = this.SUPPORTED_DATABASES;
29+
// 验证数据库类型是否支持
30+
if (!(type in SUPPORTED_DATABASES)) {
31+
const supportedTypes = Object.keys(SUPPORTED_DATABASES).join(", ");
32+
throw new Error(
33+
`Invalid database type: ${type}. Supported types are: ${supportedTypes}`,
34+
);
1635
}
1736

18-
/**
19-
* 创建数据库实例
20-
* @param {string} type - 数据库类型
21-
* @param {string} databaseName - 数据库名称
22-
* @param {Object} cache - 缓存实例(内存缓存)
23-
* @param {Object} logger - 日志记录器
24-
* @param {Object} [defaults] - 统一默认配置(如 maxTimeMS、namespace)
25-
* @returns {Object} 数据库实例
26-
* @throws {Error} 当数据库类型不支持或未实现时抛出错误
27-
*/
28-
static createInstance(type, databaseName, cache, logger, defaults) {
29-
const SUPPORTED_DATABASES = this.SUPPORTED_DATABASES;
30-
// 验证数据库类型是否支持
31-
if (!(type in SUPPORTED_DATABASES)) {
32-
const supportedTypes = Object.keys(SUPPORTED_DATABASES).join(', ');
33-
throw new Error(`Invalid database type: ${type}. Supported types are: ${supportedTypes}`);
34-
}
35-
36-
// 检查是否已实现
37-
if (SUPPORTED_DATABASES[type] === null) {
38-
throw new Error(`${type} support not implemented yet`);
39-
}
37+
// 检查是否已实现
38+
if (SUPPORTED_DATABASES[type] === null) {
39+
throw new Error(`${type} support not implemented yet`);
40+
}
4041

41-
// 获取对应的数据库类
42-
const DatabaseClass = SUPPORTED_DATABASES[type];
42+
// 获取对应的数据库类
43+
const DatabaseClass = SUPPORTED_DATABASES[type];
4344

44-
// 创建并返回实例
45-
return new DatabaseClass(type, databaseName, cache, logger, defaults);
46-
}
45+
// 创建并返回实例
46+
return new DatabaseClass(type, databaseName, cache, logger, defaults);
47+
}
4748

48-
/**
49-
* 连接数据库
50-
* @param {string} type - 数据库类型
51-
* @param {string} databaseName - 数据库名称
52-
* @param {Object} config - 数据库连接配置
53-
* @param {Object} cache - 缓存实例
54-
* @param {Object} logger - 日志记录器
55-
* @param {Object} [defaults] - 统一默认配置(如 maxTimeMS、namespace)
56-
* @param {Object} [poolManager] - 多连接池管理器(v1.0.8+)
57-
* @returns {{accessor: Function, instance: Object}} 访问器与底层适配器实例
58-
* @throws {Error} 连接失败时抛出错误
59-
*/
60-
static async connect(type, databaseName, config, cache, logger, defaults, poolManager) {
61-
// 创建数据库实例
62-
const instance = this.createInstance(type, databaseName, cache, logger, defaults);
49+
/**
50+
* 连接数据库
51+
* @param {string} type - 数据库类型
52+
* @param {string} databaseName - 数据库名称
53+
* @param {Object} config - 数据库连接配置
54+
* @param {Object} cache - 缓存实例
55+
* @param {Object} logger - 日志记录器
56+
* @param {Object} [defaults] - 统一默认配置(如 maxTimeMS、namespace)
57+
* @param {Object} [poolManager] - 多连接池管理器(v1.0.8+)
58+
* @returns {{accessor: Function, instance: Object}} 访问器与底层适配器实例
59+
* @throws {Error} 连接失败时抛出错误
60+
*/
61+
static async connect(
62+
type,
63+
databaseName,
64+
config,
65+
cache,
66+
logger,
67+
defaults,
68+
poolManager,
69+
) {
70+
// 创建数据库实例
71+
const instance = this.createInstance(
72+
type,
73+
databaseName,
74+
cache,
75+
logger,
76+
defaults,
77+
);
6378

64-
// 🆕 v1.0.8: 传递 poolManager 给实例
65-
if (poolManager) {
66-
instance.poolManager = poolManager;
67-
}
79+
// 🆕 v1.0.8: 传递 poolManager 给实例
80+
if (poolManager) {
81+
instance.poolManager = poolManager;
82+
}
6883

69-
// 建立连接
70-
await instance.connect(config);
84+
// 建立连接
85+
await instance.connect(config);
7186

72-
// ---------- 构建访问器 ----------
73-
const collection = (collectionName) => instance.collection(databaseName, collectionName);
74-
const db = (databaseName)=>{
75-
return {
76-
collection:(collectionName)=>instance.collection(databaseName, collectionName)
77-
};
78-
};
87+
// ---------- 构建访问器 ----------
88+
const collection = (collectionName) =>
89+
instance.collection(databaseName, collectionName);
90+
const db = (databaseName) => {
91+
return {
92+
collection: (collectionName) =>
93+
instance.collection(databaseName, collectionName),
94+
};
95+
};
7996

80-
return { collection, db, instance };
81-
}
97+
return { collection, db, use: db, instance };
98+
}
8299
};
83-

0 commit comments

Comments
 (0)