我有一个简单的应用程序链接到postgres数据库。加载应用程序时,它会读取大约30行数据。但现在每一个它都不会加载,当我看到我的服务器时,我有错误错误:连接已终止。
通常如果我在很短的时间内装了好几次。
有谁知道为什么会发生这种情况?我工作得太辛苦了吗?
代码如下:
function getDB(callback){
console.log('inside getDB')
Client.connect(function(err){
if(err){
return console.log('connection error', err)
}
Client.query('SELECT * FROM gallery', function(err, result){
if(err){
return console.log('error receiving data', err)
} else{
callback(null, result.rows)
}
Client.end()
})
})
}
答案 0 :(得分:0)
您似乎正在使用node-postgres。您应该考虑使用其连接池。来自文档:
"通常,您将通过池访问PostgreSQL服务器 客户端。客户需要花费很多时间来建立一个 新的联系。客户也消耗了非常重要的金额 PostgreSQL服务器上的资源 - 不是你想要做的事情 每个http请求。好消息:node-postgres附带内置的 客户共享。"
创建新连接时会发生很多事情,应该尽可能避免使用它。利用汇集可能对您的情况有所帮助。
答案 1 :(得分:0)
我在将行插入Postgres数据库中的Node方法上遇到相同的“ 错误:连接终止”错误。这是我能够解决的方法。
控制台错误不是很有帮助,所以我查看了Postgres日志。 (使用Mac)
$ tail -10 /usr/local/var/log/postgres.log
2019-02-24 10:06:38.920 CST [58520] LOG: could not receive data from client: Connection reset by peer
2019-02-24 10:06:38.921 CST [58520] LOG: unexpected EOF on client connection with an open transaction
这意味着客户端在服务器完成之前以某种方式断开了连接。就我而言,我没有正确地调用异步方法,因此客户端在执行数据库语句之前就已经完成,并且客户端断开了数据库连接。我使用了async / await风格的Node方法,但是忘记了用await调用我的async方法,这导致了错误。
对于Node中的Postgres查询,请务必遵循以下examples之一。