Javascript Node.js:initiate pg.Pool()
根据(db.js) 在express(生成的)应用程序中,我是否必须在app.js/on-app-start-up中启动/要求池(db.js),还是只需要在我的数据模型中启动/要求池(db.js)(分别在我的路由中要求)?直观地说,我会在启动时启动池,而不是在与路由的每个连接上启动池,以避免多次启动,但我对Node.js还比较陌生。再滚动一点——这里有一些使用示例 之所以能够工作,是因为节点的模块缓存。第一次需要db.js时,所有init代码立即执行。后续的Javascript Node.js:initiate pg.Pool(),javascript,node.js,postgresql,express,pg,Javascript,Node.js,Postgresql,Express,Pg,根据(db.js) 在express(生成的)应用程序中,我是否必须在app.js/on-app-start-up中启动/要求池(db.js),还是只需要在我的数据模型中启动/要求池(db.js)(分别在我的路由中要求)?直观地说,我会在启动时启动池,而不是在与路由的每个连接上启动池,以避免多次启动,但我对Node.js还比较陌生。再滚动一点——这里有一些使用示例 之所以能够工作,是因为节点的模块缓存。第一次需要db.js时,所有init代码立即执行。后续的require调用从缓存返回已初始化的
require
调用从缓存返回已初始化的模块,以便池已连接。在Express中,您可以使用app.set('db',db')避免到处需要db.js
将模块连接到Express应用程序。然后可以在路由代码中调用req.app.get('db').query(…)
如果您的数据需求非常复杂,以至于涉及到模型,那么您可能需要研究更高级的数据访问库,因为
pg
更像是一个驱动程序(如果您使用过Java,请考虑JDBC)。有很多选项,从最小数据映射器(我维护)到查询构建器()再到全面的ORMs()。我发现Express对于节点初学者来说是诅咒和祝福,所有这些都是“是的,只是生成,让我们走吧”,但对我来说,它的易用性掩盖了许多核心原则。我确实阅读了这些示例,但对一次性初始化警告感到困惑。是时候深入模块系统并导出功能了!非常感谢。顺便说一句,我在前一段时间研究了MassiveJS和Sequelize,但决定先与pg合作,并设置一个可伸缩的结构,使用最少的低级别DB数据调用…有些人希望很快看到漂亮的东西,之后会有时间使用合适的后端,)
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);
};