最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Sequelize无法连接到docker上的postgres

IT培训 admin 13浏览 0评论

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

然后还原数据库备份(如果有)。>

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

然后还原数据库备份(如果有)。>

发布评论

评论列表 (0)

  1. 暂无评论