@loke/db-kit
v2.1.3
Published
Wrapper around knex to provide some sugar such as metrics and slow query logging
Downloads
734
Readme
LOKE DB Kit
A lib for use with database libraries
const dbKit = require("@loke/db-kit");
Knex
createConfig(options)
const knex = require("knex");
const dbUri = "postgres://localhost/test-db";
const dbClient = knex(dbKit.knex.createConfig({ connection: dbUri }));
or if you're using a knexfile.js
module.exports = dbKit.knex.createConfig({
connection: process.env.DATABASE_URL || { database: "test-link" }
});
The options are as follows
connection
Gets passed directly to knex
client
The sql client to use, defaults to "pg"
.
migrationsDirectory
Where to place the db migrations, defaults to "./lib/postgres/migrations"
.
async setup(dbClient, logger, options)
const knex = require("knex");
const dbClient = knex(/* ... */);
dbKit.knex.setup(dbClient, console);
Options are:
slowQueryThreshold
Threshold for logging slow queries in ms, defaults to 200
migrateUp
weather or not setup
should migrate the db to the latest schema. Defaults to true
.
registerMetrics(registry)
Regester metrics with prom-client
const { register } = require("prom-client");
dbKit.knex.registerMetrics(register);
formatConnection(connection)
Formats a connection object/string that is valid in knex()
, redacts the password.
console.log("Using database", dbKit.knex.formatConnection(uri));
Best Practice
Bringing this all together you should probably have something like...
knexfile.js
const { knex } = require("@loke/db-kit");
module.exports = knex.createConfig({
connection: process.env.DATABASE_URL || { database: "service-name" }
});
server.js
const dbKit = require("@loke/db-kit");
const lokeLogger = require("@loke/logger");
const promClient = require("prom-client");
const dbConfig = require("./knexfile");
dbKit.knex.registerMetrics(promClient.register);
function main() {
const logger = lokeLogger.create({ metricsRegistry: promClient.register });
logger.info("Using database", dbKit.knex.formatConnection(dbConfig.connection));
const dbClient = knex(dbConfig, logger.withPrefix("db"));
await dbKit.knex.setup(dbClient, dbLogger);
// ...
}