multi-data-source
v1.0.1
Published
> Node.js library which helps developers to manage multiple RDBMS connections to different databases
Downloads
5
Maintainers
Readme
multi-data-source
Node.js library which helps developers to manage multiple RDBMS connections to different databases
Installation
npm install multi-data-source
Features
- Multiple data sources support
- Multiple RDBMS support (only PostgreSQL and MySQL for now, but you feel free to contribute your own connector to favorite RDBMS)
- Named params with param wrapping module
Dependencies
- pg -- Used to handle Postgres connection
- mysql2 -- Used to handle MySQL connection
- query-template -- Used to process queries before execution (templating and parametrizing)
Usage example
Storage config example
const config = {
'postgres': {
'host': '127.0.0.1',
'port': 5432,
'database': 'postgres',
'user': 'postgres',
'password': '',
'storageType': 'pg',
},
};
const storage = new Storage(config);
Query definition example
const getUsersByScore = {
name: 'getUsersByScore',
sql: `
SELECT id {{nickname}}
FROM users
WHERE score > :score
{{balance}}
`,
addons: {
noGlobalJoin: {
options: {propertyName: 'global', propertyValue: false},
sql: 'INNER JOIN mega_jackpot_halls AS mjh USING(hall_id)',
},
nickname: {
options: {propertyName: 'needNickname', propertyValue: true},
sql: ', nickname',
},
balance: {
options: {propertyName: 'balanceCondition', propertyValue: true},
sql: 'AND balance >= :balance',
},
},
};
Query execution example
let connection;
try {
connection = await storage.getConnection('postgres');
const data = await connection.query(getUsersByScore,
{
score: 100,
balance: 50,
},
{
templateParams: {balanceCondition: true},
}
);
console.log(data);
} catch (error) {
console.error(error);
} finally {
if (connection) {
await connection.release;
}
}
Configuration guide
Storage configuration
By default storage conig is semi-equal to pg config with additional field storageType
.
Supported storage types:
pg
-- type for PostgreSQL connection
Query configuration
This library using equal query definition to query-template
const query = {
sql: 'SELECT * FROM table', // String with SQL code
addons: { // Object with named additions
addonName: { // Addition object
sql: 'AND field1 = :field1', // String with addition SQL
options: { // Object with addition config
propertyName: 'field1', // Name of templating property
propertyValue: true, // Value of templating property
}
}
}
}
Author
Pavel Romanov -- [email protected] -- GitHub
License
Distributed under MIT License. See LICENSE
for more information;