Node.js:启动pg.Pool()

时间:2017-05-23 11:21:25

标签: javascript node.js postgresql express pg

根据example db.js

const pg = require('pg');

const client_config = {...};

const pool = new pg.Pool(client_config);

pool.on('error', function(err, client) {
  console.error('idle client error', err.mesae, err.stack);
});

module.exports.query = function(text, values, callback) {
  return pool.query(text, values, callback);
};

module.exports.connect = function(callback) {
  return pool.connect(callback);
};

express (生成的)应用程序中,我是否必须在 app.js中启动/要求池( db.js / on app start-up或者我只是在我的数据模型中需要 db.js (分别在我的路由中需要)?直观地说,我会在启动时启动池而不是每次连接到路由以避免多次启动,但我对 Node.js 相当新。

1 个答案:

答案 0 :(得分:1)

进一步滚动 - 有一些使用示例。

这可行的原因在于Node的模块缓存。第一次需要db.js时,所有init代码都会立即执行。后续require调用将从缓存中返回已初始化的模块,以便池已连接。在Express中,您可以通过使用app.set('db', db);将模块附加到Express应用程序来避免遍布整个地方的db.js。然后,您可以在路线代码中调用req.app.get('db').query(...)

如果您的数据需求足够复杂以至于涉及模型,您可能需要查看更高级别的数据访问库,因为pg更像是一个驱动程序(如果您已经完成了任何Java,请考虑使用JDBC) 。从最小数据映射器(我维护MassiveJS)到查询构建器(Knex)到全尺寸ORM(Sequelize),有很多选项。