gpt4 book ai didi

javascript - 如何用函数扩展 pg-promise 接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:44 25 4
gpt4 key购买 nike

我有一个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 对象是接口(interface)类型 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属性。

最佳答案

来自pg-promise的作者.

<小时/>

pg-promise 中的数据库协议(protocol)可扩展,支持事件extend这使您可以在各个级别上扩展协议(protocol)。您需要这种级别的自动化,因为当涉及到基本的Tasks时和 Transactions ,它封装了分配的连接,协议(protocol)变得动态,所以你需要一个特殊的规定来让协议(protocol)扩展自动工作,这正是事件extend确实如此。

为了更好地理解,我写了pg-promise-demo展示如何正确执行此操作,以及其他一些在大多数情况下有用的高级内容。

关于javascript - 如何用函数扩展 pg-promise 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60115783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com