错误:在 TCPConnectWrap.afterConnect 处连接 ECONNREFUSED 127.0.0.1:5432 [未完成]

moh*_*deh 4 postgresql backend production-environment node.js sequelize.js

我有一个带有 postgres 数据库的简单节点应用程序,它在我的本地机器上完美运行,我曾经在 Heroku 上部署后端应用程序,因为它没有更多免费服务,所以我尝试了许多不同的替代方案,例如 {Cyclic,RailWay} ,现在我无法无法正确部署服务器并出现以下错误:

original: Error: connect ECONNREFUSED 127.0.0.1:5432
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1278:16) {
errno: -111,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 5432
}
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

"use strict";
require('dotenv').config();
const Collection = require("./collection");

const Users = require("./user.model");
const Records =require('./records')

const POSTGRES_URI = process.env.NODE_ENV === 'test' ? 'sqlite:memory:' : process.env.DATABASE_URL;
const {
Sequelize,
DataTypes
} = require("sequelize");

let sequelizeOptions =process.env.NODE_ENV === "production" ?
{
dialect: 'postgres',
protocol: 'postgres',

    } : {};

let sequelize = new Sequelize(POSTGRES_URI,sequelizeOptions);
const users = Users(sequelize, DataTypes);
const records = Records(sequelize, DataTypes);

// Users.hasMany(Records)
users.hasMany(records, {
foreignKey: "userId",
sourceKey: "id",
onDelete:'cascade'
});

records.belongsTo(users, {
foreignKey: "userId",
targetKey: "id",
});

module.exports = {
db: sequelize,
records: new Collection(records),
users:users,
};
Run Code Online (Sandbox Code Playgroud)

这是.env文件

DATABASE_URL=postgres://mohammadsh:0000@localhost:5432/covid
PORT=3000
SECRET=secretstring
NODE_ENV=production


Run Code Online (Sandbox Code Playgroud)

这是我的 package.json


"scripts": {
    "start": "NODE_ENV=production node index.js",
    "dev": "NODE_ENV=development node index.js"
    

  
  "dependencies": {
    "axios": "^1.2.1",
    "base-64": "^1.0.0",
    "bcrypt": "^5.1.0",
    "cors": "^2.8.5",
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "jsonwebtoken": "^8.5.1",
    "pg": "^8.8.0",
    "sequelize": "^6.27.0",
    "sequelize-cli": "^6.5.2",
    "sqlite3": "^5.1.4"
  }

Run Code Online (Sandbox Code Playgroud)

我在 {Cyclic and RailWay} 上的部署中设置了 .env 变量,就像它们在我的 .env 文件中一样

  • 当我的本地机器上发生此错误时,我只需通过此命令运行 postgres 服务器
pg_ctl -D /home/linuxbrew/.linuxbrew/var/postgresql@14 start
Run Code Online (Sandbox Code Playgroud)

如何在循环上做到这一点?或任何其他应用程序

  • 我通过使用连接选项尝试了代码打孔*aslo我尝试将IP地址更改为0.0.0.0,但我得到了相同的错误

original: Error: connect ECONNREFUSED 127.0.0.1:5432
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1278:16) {
errno: -111,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 5432
}
}
Run Code Online (Sandbox Code Playgroud)

any help ???

Ral*_*ack 7

你的 postgres 正在本地运行。您可以通过主机:localhost (127.0.0.1) 和端口 5432 访问本地 postgres。

如果你直接在主机上安装 postgres,或者使用 docker 进行安装,映射端口,它将在本地运行。

部署后,您需要指定正确的 url,因为 localhost (127.0.0.1) 现在指的是您的 api 容器,其中未安装 postgres。

因此,如果您有外部 postgresDb ,则需要将您的凭据、url、DBname 放入连接字符串中。