node.js - Postgresql 连接在 node.js 和 pg 中超时

标签 node.js postgresql openshift pg

我是 Node 、postgresql 和整个网络开发业务的新手。我目前正在编写一个连接到 postgres 数据库并在 Web View 中显示表格内容的简单应用程序。该应用程序将托管在 OpenShift 中。

我的主要条目在 server.js 中:

var pg = require('pg');
pg.connect(connection_string, function(err, client) {
    // handle error
    // save client: app.client = client;
});

现在,处理 GET/ 请求:

function handle_request(req, res){
    app.client.query('...', function(err, result){
        if (err) throw err; // Will handle error later, crash for now
        res.render( ... );  // Render the web view with the result
    });
}

我的应用程序似乎可以正常工作:表格在 WebView 中正确呈现,并且适用于多个连接(来自不同设备的不同网络客户端)。但是,如果几分钟内没有请求,则后续请求将使应用程序崩溃并显示超时信息。这是堆栈信息:

/home/hai/myapp/server.js:98
            if (err) throw err;
                           ^
Error: This socket is closed.
    at Socket._write (net.js:474:19)
    at Socket.write (net.js:466:15)
    at [object Object].query (/home/hai/myapp/node_modules/pg/lib/connection.js:109:15)
    at [object Object].submit (/home/hai/myapp/node_modules/pg/lib/query.js:99:16)
    at [object Object]._pulseQueryQueue (/home/hai/myapp/node_modules/pg/lib/client.js:166:24)
    at [object Object].query (/home/hai/myapp/node_modules/pg/lib/client.js:193:8)
    at /home/hai/myapp/server.js:97:17
    at callbacks (/home/hai/myapp/node_modules/express/lib/router/index.js:160:37)
    at param (/home/hai/myapp/node_modules/express/lib/router/index.js:134:11)
    at pass (/home/hai/myapp/node_modules/express/lib/router/index.js:141:5)

有没有办法避免连接超时(更好)?还是按需重新连接(最好)?我试图通过在开始时不连接到数据库来重新设计我的应用程序,而是根据 GET/ 请求。此解决方案仅适用于第一个请求,然后在第二个请求上崩溃。感谢任何见解。

最佳答案

您是否查看过 postgres keepalive 设置值?它发送数据包以防止空闲连接超时。 http://www.postgresql.org/docs/9.1/static/runtime-config-connection.html

我也发现了这个类似的问题: How to use tcp_keepalives settings in Postgresql?

您还可以按设定的时间间隔从数据库执行非常小的查询。不过这个方法肯定比较hack。

编辑:您也可以尝试像这样启动客户端:

var client = new pg.Client(conString);

在进行查询之前,您可以检查客户端是否仍处于连接状态。我相信你可以使用:

if(client.connection._events != null)
    client.connect();

关于node.js - Postgresql 连接在 node.js 和 pg 中超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14086011/

相关文章:

node.js - MongoClient native FindAndModify "Need update or remove"错误

sql - "NOT IN"Postgres 的正确使用方法

sql - 按键设置/搜索分页和按搜索词过滤

来自同一台机器的多个项目的开放类次的 ssh 键

javascript - 用于导航和编辑多层对象数组的 findIndex 的替代方案

Heroku 未检测到 Node.js 应用程序

javascript - Node.js 捕获空 POST 请求正文

performance - postgreSQL优化

wordpress - openshift + wordpress + git

node.js - 我无法使用nodejs在openshift中上传图像