1

几周前,我启动了一个博客应用程序。为此,我使用 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. 重新启动我的电脑
  2. 重启services中的服务(这是windows机器)
  3. 重新安装 postgresql(完全)

现在我正在写这篇文章,我才意识到我将我的 Windows 更新到了 2004 版和 wsl2。以前这是 wsl1。这和它有什么关系吗?我只是想再次使用 Postgres 开始一个新项目。我想我会暂时使用 mongodb 和和尚或猫鼬,直到问题得到解决。

8 月 3 日添加:在对 stackoverflow 进行了更多阅读后,我发现这可能与运行的 postgresql 服务器实例的数量有关。这是我从 taskmanager 得到的: taskmanager的图片 运行 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}`);
});
4

0 回答 0