问题描述
我通过node-postgres与我的postgres数据库建立了简单的连接,如下所示:
let { Pool,Client } = require("pg");
let postgres = new Client({
host: "localhost",port: 5432,user: "postgres",password: "Thisisngo1995!",});
module.exports = postgres;
我通过使用以下代码触摸端点来测试连接:
let postgres = require("../../databases/postgres");
exports.postgres_get_controller = (req,resp) => {
console.log("Reached Here");
postgres
.connect()
.then(() => console.log("connected"))
.catch((err) => console.error("connection error",err.stack))
.then(() =>
postgres.end((err) => {
console.log("postgres disconnected");
})
);
我得到了所需的console.log,表明客户端已连接,然后断开连接。但是,每当刷新页面时,我都会收到以下消息:
为什么会这样?
解决方法
客户端不可重用。每当您尝试重新连接已使用的客户端时,这都会更改客户端引发错误。创建它们很便宜:只需实例化一个新的(或使用池)
解决方案是为每个请求创建pg客户端。
ccontroller.js
:
let { Client } = require('pg');
exports.postgres_get_controller = (req,resp) => {
console.log('Reached Here');
let postgres = new Client({
host: 'localhost',port: 5430,database: 'node-sequelize-examples',user: 'testuser',password: 'testpass',});
postgres
.connect()
.then(() => console.log('connected'))
.catch((err) => console.error('connection error',err.stack))
.then(() =>
postgres.end((err) => {
console.log('postgres disconnected');
if (err) {
console.log('error during disconnection',err.stack);
}
}),);
resp.sendStatus(200);
};
server.js
:
const express = require('express');
const { postgres_get_controller } = require('./controller');
const app = express();
const port = 3000;
app.get('/',postgres_get_controller);
app.listen(port,() => console.log('server start'));
多次刷新页面以击中端点并执行控制器代码后的日志:
server start
Reached Here
connected
postgres disconnected
Reached Here
connected
postgres disconnected
Reached Here
connected
postgres disconnected
Reached Here
connected
postgres disconnected
Reached Here
connected
postgres disconnected
Reached Here
connected
postgres disconnected
Reached Here
connected
postgres disconnected