DataSources are responsible for handling the creation of database connection like MySQL, PostgreSQL, Oracle
Create a DataSource Config
PostgresSQL
export const PostgresDatabaseConfiguration = {
client: DatabaseClient.KNEX,
config: <CommonDatabaseConfig>{
host: process.env.POSTGRES_HOST || 'localhost',
port: process.env.POSTGRES_PORT || 5432,
user: process.env.POSTGRES_USER || 'root',
password: process.env.POSTGRES_PASSWORD || 'root@123',
database: process.env.POSTGRES_DATABASE || 'test',
pooling: {min: 1, max: 10},
driver: DatabaseDriver.POSTGRES,
cluster: {
secondaries: [
{
host: localhost,
port: 5433
}
]
}
}
};MySQL & MariaDB
export const MySQLDatabaseConfiguration = {
client: DatabaseClient.KNEX,
config: <CommonDatabaseConfig>{
host: process.env.MYSQL_HOST || 'localhost',
port: process.env.MYSQL_PORT || 3306,
user: process.env.MYSQL_USER || 'dev',
password: process.env.MYSQL_PASSWORD || 'dev@123',
database: process.env.MYSQL_DATABASE || 'dev',
pooling: {min: 1, max: 10},
driver: DatabaseDriver.MYSQL,
cluster: {
secondaries: [
{
host: localhost,
port: 5433
}
]
}
}
};Create a DataSource
Supported DataSources
To create a database we need to create a class extends the AbstractDataSourceClient
@UseConfig(PostgresDatabaseConfiguration)
export class PostgresDatabase extends AbstractDataSourceClient<KnexClient> {
constructor() {
super();
}
context(): DatabaseContext<any> {
return this;
}
}Custom Database
@Default()
export class CassandraDatabase extends AbstractDatabaseClient<Any> {
init(): DatabaseConnector<Any> {
return {
connect: () => {
//database connection behavior
},
get: () => {
//datbase instance
}
};
}
}
Multi-Tenancy
@UseConfig(PostgresDatabaseConfiguration)
export class PostgresDatabase extends AbstractTenancyDataSourceClient<KnexClient> {
constructor() {
super();
}
}Multi-Primary DataSource
export const PostgresDatabaseConfiguration = {
client: DatabaseClient.KNEX,
config: <CommonDatabaseConfig>{
host: process.env.POSTGRES_HOST || 'localhost',
port: process.env.POSTGRES_PORT || 5432,
user: process.env.POSTGRES_USER || 'root',
password: process.env.POSTGRES_PASSWORD || 'root@123',
database: process.env.POSTGRES_DATABASE || 'test',
pooling: {min: 1, max: 10},
driver: DatabaseDriver.POSTGRES,
cluster: {
secondaries: [
{
host: localhost,
port: 5433,
writable: true # default is false
}
]
}
}
};Set As Default
Using @Default will set the database as default for database lookup.
@UseConfig(PostgresDatabaseConfiguration)
@Default()
export class PostgresDatabase extends AbstractDataSourceClient<KnexClient> {
constructor() {
super();
}
context(): DatabaseContext<any> {
return this;
}
}Register a DataSource
To register a datasource. We just need to import it to Root Module with @Databases
@Module({
imports: [TodosModule],
})
@DataSources([MYSQLDatabase, PostgresDatabase])
export class AppModule {
}Lookup a DataSource
The independent children module can use this primary store with @DatabaseLookup.
@DatabaseLookupfind the default database.@DatabaseLookup('name')will find the database with the provided name.
src/providers/todos.provider.ts
Supported Decorators
@UseConfig- set config for a database@Default- set database as default@DatabaseLookup- lookup for a database