根据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 相当新。
答案 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),有很多选项。