#node.js #postgresql #node-postgres
#node.js #postgresql #узел-postgres
Вопрос:
У меня есть простое подключение к моей базе данных postgres с помощью node-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");
})
);
Я получаю нужную консоль.журнал означает, что клиент был подключен, а затем отключен. Однако всякий раз, когда я обновляю страницу, я получаю это сообщение:
Почему это происходит?
Ответ №1:
Клиенты не могут использоваться повторно. Это приводит к тому, что клиент выдает ошибки всякий раз, когда вы пытаетесь повторно подключить клиент, который уже использовался. Их создание дешево: просто создайте новый экземпляр (или используйте пул)
Смотрите Этот комментарий и эту проблему
Решение заключается в создании клиента 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