34 lines
1.0 KiB
JavaScript
Executable File
34 lines
1.0 KiB
JavaScript
Executable File
'use strict';
|
|
|
|
const config = require('config');
|
|
const knex = require('knex');
|
|
|
|
const knexInstance = knex({
|
|
client: 'pg',
|
|
connection: config.database.owner,
|
|
pool: config.database.pool,
|
|
// performance overhead, don't use asyncStackTraces in production
|
|
asyncStackTraces: process.env.NODE_ENV === 'development',
|
|
// debug: process.env.NODE_ENV === 'development',
|
|
});
|
|
|
|
knexInstance.on('query', function onQuery(query) {
|
|
const bindingCount = query.bindings?.length ?? 0;
|
|
|
|
if (bindingCount > 50000) {
|
|
const error = new Error(`[knex] Dangerous query: ${bindingCount} bindings detected: ${query.sql?.slice(0, 200)}${query.sql?.length > 200 ? '...' : ''}`);
|
|
|
|
Error.captureStackTrace(error, onQuery);
|
|
// console.error(error);
|
|
|
|
throw error; // optionally hard-fail so you get a real stack trace
|
|
}
|
|
});
|
|
|
|
knexInstance.on('query-error', (error, query) => {
|
|
error.knexSql = `${query.sql?.slice(0, 200)}${query.sql?.length > 200 ? '...' : ''}`;
|
|
error.knexBindingCount = query.bindings?.length;
|
|
});
|
|
|
|
module.exports = knexInstance;
|