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 文件中一样
pg_ctl -D /home/linuxbrew/.linuxbrew/var/postgresql@14 start
Run Code Online (Sandbox Code Playgroud)
如何在循环上做到这一点?或任何其他应用程序
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 ???
你的 postgres 正在本地运行。您可以通过主机:localhost (127.0.0.1) 和端口 5432 访问本地 postgres。
如果你直接在主机上安装 postgres,或者使用 docker 进行安装,映射端口,它将在本地运行。
部署后,您需要指定正确的 url,因为 localhost (127.0.0.1) 现在指的是您的 api 容器,其中未安装 postgres。
因此,如果您有外部 postgresDb ,则需要将您的凭据、url、DBname 放入连接字符串中。
| 归档时间: |
|
| 查看次数: |
20993 次 |
| 最近记录: |