我有一个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
属性。
我有一个node.js模块pg-promise,实例化如下。 const pgp = require('pg-promise')(); //数据库连接详细信息; const cn = {host:'localhost',//'localhost'是默认值; ...
来自pg-promise的作者。
pg-promise
似乎使用了一种令人讨厌的模式,其中它们冻结了每个对象并使每个属性为只读,因此您将无法像尝试那样简单地手动向其添加属性。该库支持extend
的extend
属性中的扩展,如下所示: