Postgresql - Nodejs ошибка подключения (ECONNREFUSED) Windows 10 - PullRequest
0 голосов
/ 02 августа 2020

Через пару недель go Я запустил приложение для блога. Для этого я использовал postgresql в качестве базы данных на бэкэнде. В то время приложение работало нормально. Я мог получать данные из внешнего интерфейса на внутренний сервер, работающий под управлением express. Сегодня я решил снова посетить проект, но столкнулся с ошибкой. После некоторой обработки ошибок и кучи поисков в StackOverflow я смог получить это сообщение:

Error: connect ECONNREFUSED 127.0.0.1:5432
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16) {
  errno: 'ECONNREFUSED',
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 5432
}

Сервер postgres работает на порту 5432, а НЕ в docker (здесь я найти проблему чаще всего с другими людьми).

Ниже я опубликую полный код, но проблема возникает здесь:

const { Client } = require('pg');

const client = new Client({
    user: 'jonas',
    host: 'localhost',
    database: 'Blog_db',
    password: '1518',
    port: '5432',
});

client.connect().catch(err => {
    console.error(err);
});

(Кстати, это правильный пароль и имя пользователя потому что я могу получить доступ к уже существующим данным через pgAdmin).

Я не понимаю, почему он не подключается.

Я пробовал:

  1. Перезапуск моего p c
  2. Перезапуск службы в службах (это машина windows)
  3. Переустановка postgresql (полностью)

Теперь, когда Пишу этот пост, я только что понял, что обновил свой windows до версии 2004 и wsl2. Раньше это был wsl1. Может ли это иметь какое-то отношение к этому? Я просто хотел начать новый проект, опять же с Postgres. Я думаю, что временно буду использовать mongodb и monk или mon goose, пока проблема не будет исправлена.

Добавлено 3 августа: после дополнительного чтения на stackoverflow я обнаружил, что это может быть связано с количеством экземпляров postgresql сервер запущен. Вот что я получил от диспетчера задач: Изображение диспетчера задач Это нормально, что запущено 3 экземпляра? Если нет, то как мне это исправить?

Мой полный код, если вам интересно (не обязательно):

//Express imports
const express = require('express'); //Main express lib
const morgan = require('morgan'); //Lib for loging get and post requests
const cors = require('cors'); //Only allowing the backend to talk to the frontend
const helmet = require('helmet'); //Deleting and adding html-headers to mask express

//Express app setup
const app = express();
app.use(express.json());
app.use(morgan('dev'));
app.use(helmet());
app.use(
    cors({
        origin: 'http://localhost:3000',
    })
);

//Postgresql import
const { Client } = require('pg'); //Main postgres nodejs lib

//Other
require('dotenv').config(); //Use environement variables definded in .env file

console.log(JSON.parse(process.env.PG_CLIENT_CONNECT_INFO));
//Create a connection client to database
const client = new Client({
    user: 'jonas',
    host: 'localhost',
    database: 'Blog_db',
    password: '1518',
    port: '5432',
});

client.connect().catch(err => {
    console.error(err);
});

//Get the blogs from the database in JSON format
app.get('/API/getBlogs', (req, res) => {
    const query = `
    SELECT * FROM blogs
    ORDER BY id ASC
    `;

    client
        .query(query)
        .then(response => {
            res.json(response.rows);
        })
        .catch(err => {
            console.error(err);
            res.send(err);
        });
});

//Add blogs to database as JSON object converted to SQL query
app.post('/API/addBlogs', (req, res) => {
    const query = `
        INSERT INTO blogs (author, title, content)
        VALUES ('${req.body.author}', '${req.body.title}', '${req.body.content}')
    `;

    client
        .query(query)
        .then(response => {
            console.log(`${response.rows} \n Successfully added requested data.`);
            res.sendStatus(200);
        })
        .catch(err => {
            console.error(err);
            res.send(err);
        });
});

const port = process.env.EXPRESS_PORT || 1337;
app.listen(port, () => {
    console.log(`The app is now listening on http://localhost:${port}`);
});
...