У меня есть node.js модуль pg-promise
, созданный следующим образом.
const pgp = require('pg-promise')();
// Database connection details;
const cn = {
host: 'localhost', // 'localhost' is the default;
...
}
// Create db connection and verify it
var db = pgp(process.env.DATABASE_URL || cn);
db.one('Select version()')
.then(data => {
log.info('Connected: ', data);
})
.catch(error => {
log.error("Error connecting to db", error);
})
// extension methods
db.findById = function (table, id) {
log.debug('read ', table, id);
return db.one('Select * from ' + table + ' where id = $1', id);
}
module.exports = db;
Объект db является экземпляром типа интерфейса pgPromise.IDatabase<{}, pg.Iclient>
Я хотел бы иметь возможность вызывать функции, предоставляемые этой библиотекой, вместе с моими собственными функциями.:
const db = require('../db');
db.any('Select query..')
.then(data => { res.send(data); })
.catch(err => { log.error(err); });
db.findById('users',1)
.then(data => { res.send(data); })
.catch(err => { log.error(err); });
Но когда я ее запускаю, я получаю сообщение об ошибке
TypeError: db.findById is not a function
Я тоже пытался, но с тем же Эффект.
module.exports = db;
module.exports.findById = function()...;
Единственное решение, которое я мог придумать, было таким:
module.exports = {
db: db,
findById: function(){
...
}
}
Но теперь уродливо использовать его в других модулях, так как мне всегда нужно задавать конкретные вопросы для db
свойство.