database-dispatcher
DatabaseDispatcher is a package that returns the necessary DB driver from a received model.
Access to the databases configuration then returns the driver instance with the connection.
It caches the driver per config properties.
Installation
npm install @janiscommerce/database-dispatcher
npm install --save @janiscommerce/mysql
npm install --save @janiscommerce/mongodb
npm install --save @janiscommerce/elasticsearch
Settings
Config file with Settings package, with settings in JSON file /path/to/root/.janiscommercerc.json
into the key database
, clients
, databaseWriteType
, databaseReadType
:
{
"database": {
"core": {
"type": "mysql",
"host": "http://my-host-name.com",
"database": "my-database"
},
"other": {
"type": "mongodb",
"host": "http://other-host-name.com",
"database": "my-database"
},
"another": {
"type": "elasticsearch",
"host": "http://another-host-name.com",
}
},
"databaseWriteType": "mongodb",
"databaseReadType": "mysql",
"clients": {
"database": {
"fields": {
"write": {
"dbHost": "host",
"database": "collection"
},
"read": {
"url": "host",
"dbDatabase": "database"
}
}
}
}
}
Database Settings
- Keys validations depends on the DBDriver.
type
: if it's not exist, databaseWriteType
will be use as default.
Client Settings
To assign Read and Write types of DBDrivers.
databaseWriteType
: Required, Type of Write Database. It's the default DBDriver for every database.databaseReadType
: Optional, Type of Read Database.
Mapped Aliases of Clients Objects
clients.database.fields.write
: For Write DBclients.database.fields.read
: For Read DB
Structure:
key
: Field present in Client objectvalue
: Field needed in DBDriver
Example
In .janiscommercerc.json
{
"clients": {
"database": {
"fields": {
"write": {
"url": "host",
"index": "database"
}
}
}
},
"databaseWriteType": "elasticsearch"
}
Client Object getted from Client DB
client = {
id: '123'
name: 'Company',
url: 'http://company-host-name.com',
index: 'company.index'
}
Config will be
config = {
host: 'http://company-host-name.com',
databse: 'company.index'
}
API
-
getDatabaseByKey(databaseKey)
Receives the database key [String]
and returns the database driver instance associeted to a config.
If the databaseKey
dosen't exists in any config source will throw a DatabaseDispatcherError
.
The default value of databaseKey
parameter is "_default"
.
-
getDatabaseByConfig(config)
Receives the config [Object]
and returns the database driver instance.
-
getDatabaseByClient(clientObject, useReadDB)
Receives the client object [Object]
and returns the database driver instance associeted to a config.
If useReadDB
([Boolean]
) doesn't exists or it's FALSE
will try to get Write DBDriver Type by default, if it's TRUE
will try to get Read DBDriver Type.
If the databaseReadType
doesn't exists will use databaseWriteType
.
If the databaseWriteType
doesn't exists will be throw a DatabaseDispatcherError
.
-
clearCache()
Clear the internal cache, including config and DB connections.
Errors
The errors are informed with a DatabaseDispatcherError
.
This object has a code that can be useful for a correct error handling.
The codes are the following:
Code | Description |
---|
1 | Settings not found |
2 | Invalid settings |
3 | ConfigDB not found for databaseKey in Settings |
4 | Invald ConfigDB found in Settings for a databaseKey |
5 | Invalid Client Object |
6 | DB Driver not installed |
7 | Invalid DB Driver (not a valid Class) |
Usage
const DatabaseDispatcher = require('@janiscommerce/database-dispatcher');
const myDBConnection = DatabaseDispatcher.getDatabaseByKey('core');
console.log(myDBConnection);
const client = model.getClientById('123')
const myDBWriteConnection = DatabaseDispatcher.getDatabaseByClient(client);
console.log(myDBWriteConnection.constructor.name);
const otherClient = model.getClientById('1234')
const myDBWriteConnection = DatabaseDispatcher.getDatabaseByClient(otherClient, true);
console.log(myDBWriteConnection.constructor.name);
DatabaseDispatcher.clearCache();