Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js:initiate pg.Pool()_Javascript_Node.js_Postgresql_Express_Pg - Fatal编程技术网

Javascript Node.js:initiate pg.Pool()

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调用从缓存返回已初始化的

根据(db.js)

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

再滚动一点——这里有一些使用示例

之所以能够工作,是因为节点的模块缓存。第一次需要db.js时,所有init代码立即执行。后续的
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);
};