几周前,我启动了一个博客应用程序。为此,我使用 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 访问已经存在的数据)。
我不明白为什么它没有连接。
我努力了:
- 重新启动我的电脑
- 重启services中的服务(这是windows机器)
- 重新安装 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}`);
});