You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

67 lines
1.4 KiB

/**
* 数据库服务提供者
* 负责数据库连接和初始化
*/
import knex from 'knex'
import { databaseConfig } from '../config/database.js'
class DatabaseProvider {
constructor() {
this.db = null
}
/**
* 初始化数据库连接
*/
async register() {
try {
this.db = knex(databaseConfig)
// 测试数据库连接
await this.db.raw('SELECT 1')
console.log('✓ 数据库连接成功')
// 运行待处理的迁移
await this.runMigrations()
return this.db
} catch (error) {
console.error('✗ 数据库连接失败:', error.message)
throw error
}
}
/**
* 运行数据库迁移
*/
async runMigrations() {
try {
await this.db.migrate.latest()
console.log('✓ 数据库迁移完成')
} catch (error) {
console.error('✗ 数据库迁移失败:', error.message)
throw error
}
}
/**
* 获取数据库实例
*/
getConnection() {
return this.db
}
/**
* 关闭数据库连接
*/
async close() {
if (this.db) {
await this.db.destroy()
console.log('✓ 数据库连接已关闭')
}
}
}
// 导出单例实例
export default new DatabaseProvider()