根据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) em>/在应用程序启动时还是我只需要数据模型中的db.js(分别在我的 route 需要)?直觉上,我会在启动时启动池,而不是在每次连接到路由时启动池,以避免多次启动,但我对 Node.js 还很陌生。
最佳答案
再滚动一点——有使用示例。
其工作原理归功于 Node 的模块缓存。第一次需要 db.js 时,所有初始化代码都会立即执行。后续的 require 调用从缓存中返回已经初始化的模块,因此池已经连接。在 Express 中,您可以使用 app.set('db', db);
将模块附加到 Express 应用程序,从而避免到处都需要 db.js。然后,您可以在路由代码中调用 req.app.get('db').query(...)
。
如果您的数据需求足够复杂到涉及模型,您可能需要研究更高级别的数据访问库,因为 pg
更多的是一个驱动程序(如果您做过任何 Java,请考虑 JDBC) )。有很多选项,从最小的数据映射器(我维护 MassiveJS )到查询构建器( Knex )再到全面的 ORM( Sequelize )。
关于javascript - Node.js:启动 pg.Pool(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44133360/