简体   繁体   English

Sequelize 无法连接到 docker 上的 postgres

[英]Sequelize can't connect to postgres on docker

When i try to run my server sequelize not connect to database and for consequence none of my model are created.当我尝试运行我的服务器时,请不要连接到数据库,因此我的 model 都没有创建。

My docker-compose我的 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

My app.js我的 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;

My sequelize config我的续集配置

"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我的控制台登录

I dont get errors from db.authenticate() but nothing happened and the execution proceed to the next lines (console.logs).我没有从 db.authenticate() 得到错误,但什么也没发生,执行继续到下一行(console.logs)。

Any help?有什么帮助吗?


Edit: This is an incompatibility with node v14, so downgrade to v13 ou LTS solved my problem.编辑:这是与节点 v14 的不兼容,因此降级到 v13 或 LTS 解决了我的问题。

Stop your application:停止您的应用程序:

docker-compose down

Clean up your databases files:清理您的数据库文件:

rm -rf ~/databases/Trademon/*

Then start again:然后重新开始:

docker-compose up

and then restore database backup if any.然后恢复数据库备份(如果有)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM