Sequelize无法连接到docker上的postgres
[当我尝试运行服务器时,sequelize无法连接到数据库,因此没有创建任何模型。
我的docker-compose
version: "3.7"
services:
backend:
build: ./Trademon-Backend
environment:
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: Trademon
DB_HOST: database
DB_PORT: 5432
DB_DIALECT: postgres
DB_RECREATE: 1 # To recreate database
JWT_SECRET: TrademonSecret
ports:
- "8000:8000"
volumes:
- ./Trademon-Backend:/backend/
- /backend/node_modules/
depends_on:
- database
command: ["./wait-for-it.sh", "database:5432", "--", "nodemon"]
database:
image: postgres:latest
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: Trademon
volumes:
- ~/databases/Trademon:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 30s
timeout: 30s
retries: 3
我的app.js
const express = require("express");
const path = require("path");
const cookieParser = require("cookie-parser");
const logger = require("morgan");
const passport = require("passport");
const db = require("./models/index").sequelize;
const usersRouter = require("./routes/v1/users");
const app = express();
const RECREATE_DB = !!+process.env.DB_RECREATE || false;
require("./config/passport");
/**
* Passport initialization
*/
app.use(passport.initialize());
/**
* Database connection
*/
console.log("Trying to connect to database...");
try {
db.authenticate();
console.log("Connection to database has been established successfully.");
if (RECREATE_DB) {
console.log("Recreating database!");
db.sync({ force: true });
}
} catch (err) {
console.error("Unable to connect to the database:", err);
}
app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));
app.use("/v1/users", usersRouter);
app.use((req, res) => {
res.status(404).send("Sorry this page does not exist!");
});
module.exports = app;
我的续集配置
"use strict";
const fs = require("fs");
const path = require("path");
const Sequelize = require("sequelize");
const env = process.env.NODE_ENV || "development";
const config = require(__dirname + "/../config/database.js")[env];
const basename = path.basename(__filename);
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
);
}
fs.readdirSync(__dirname)
.filter(file => {
return (
file.indexOf(".") !== 0 && file !== basename && file.slice(-3) === ".js"
);
})
.forEach(file => {
const model = sequelize["import"](path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
My log on console
我没有从db.authenticate()中得到错误,但是什么也没发生,执行继续到下一行(console.logs)。
有帮助吗?
回答如下:停止您的应用程序:
docker-compose down
清理数据库文件:
rm -rf ~/databases/Trademon/*
然后重新开始:
docker-compose up
然后还原数据库备份(如果有)。>