Database Drivers
@esengine/database-drivers is ESEngine’s database connection management layer, providing unified connection management for MongoDB, Redis, and more.
Features
Section titled “Features”- Connection Pool - Automatic connection pool management
- Auto Reconnect - Automatic reconnection on disconnect
- Event Notification - Connection state change events
- Type Decoupling - Simplified interfaces, no dependency on native driver types
- Shared Connections - Single connection shared across modules
Installation
Section titled “Installation”npm install @esengine/database-driversPeer Dependencies:
npm install mongodb # For MongoDB supportnpm install ioredis # For Redis supportArchitecture
Section titled “Architecture”┌─────────────────────────────────────────────────────────────────┐│ @esengine/database-drivers (Layer 1) ││ ┌─────────────────────┐ ┌─────────────────────┐ ││ │ MongoConnection │ │ RedisConnection │ ││ │ - Pool management │ │ - Auto-reconnect │ ││ │ - Auto-reconnect │ │ - Key prefix │ ││ │ - Event emitter │ │ - Event emitter │ ││ └──────────┬──────────┘ └─────────────────────┘ ││ │ ││ ┌──────────▼──────────┐ ││ │ IMongoCollection<T> │ ← Type-safe interface ││ │ (Adapter pattern) │ decoupled from mongodb types ││ └─────────────────────┘ │└─────────────────────────────────────────────────────────────────┘ │ ▼┌───────────────────────┐ ┌───────────────────────┐│ @esengine/database │ │ @esengine/transaction ││ (Repository pattern) │ │ (Distributed tx) │└───────────────────────┘ └───────────────────────┘Quick Start
Section titled “Quick Start”MongoDB Connection
Section titled “MongoDB Connection”import { createMongoConnection } from '@esengine/database-drivers'
// Create connectionconst mongo = createMongoConnection({ uri: 'mongodb://localhost:27017', database: 'game', pool: { minSize: 5, maxSize: 20 }, autoReconnect: true})
// Listen to eventsmongo.on('connected', () => console.log('MongoDB connected'))mongo.on('disconnected', () => console.log('MongoDB disconnected'))mongo.on('error', (e) => console.error('Error:', e.error))
// Connectawait mongo.connect()
// Use collectionsconst users = mongo.collection<User>('users')await users.insertOne({ name: 'John', score: 100 })
const user = await users.findOne({ name: 'John' })
// Disconnect when doneawait mongo.disconnect()Redis Connection
Section titled “Redis Connection”import { createRedisConnection } from '@esengine/database-drivers'
const redis = createRedisConnection({ host: 'localhost', port: 6379, keyPrefix: 'game:', autoReconnect: true})
await redis.connect()
// Basic operationsawait redis.set('session:123', 'data', 3600) // With TTLconst value = await redis.get('session:123')
await redis.disconnect()Service Container Integration
Section titled “Service Container Integration”import { ServiceContainer } from '@esengine/ecs-framework'import { createMongoConnection, MongoConnectionToken, RedisConnectionToken} from '@esengine/database-drivers'
const services = new ServiceContainer()
// Register connectionsconst mongo = createMongoConnection({ uri: '...', database: 'game' })await mongo.connect()services.register(MongoConnectionToken, mongo)
// Retrieve in other modulesconst connection = services.get(MongoConnectionToken)const users = connection.collection('users')Documentation
Section titled “Documentation”- MongoDB Connection - MongoDB configuration details
- Redis Connection - Redis configuration details
- Service Tokens - Dependency injection integration