如何使用功能扩展pg-promise接口>>

问题描述 投票:1回答:2

我有一个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'是默认值; ...

javascript node.js pg-promise
2个回答
1
投票

来自pg-promise的作者。


0
投票

pg-promise似乎使用了一种令人讨厌的模式,其中它们冻结了每个对象并使每个属性为只读,因此您将无法像尝试那样简单地手动向其添加属性。该库支持extendextend属性中的扩展,如下所示:

© www.soinside.com 2019 - 2024. All rights reserved.