Sequelize Migration server соединяется с двумя базами данных

0

Я создал сервер переноса последовательностей и связан с базой данных mysql, используя Sequelize CLI, обратившись к этому документу. Теперь я хочу знать, можно ли запускать миграции в другой базе данных mysql с использованием одного и того же сервера миграции или мне нужно создать другой сервер миграции для запуска миграции в другой базе данных. Заранее благодарю вас.

config.js

{
  "development": {
    "username": "root",
    "password": null,
    "database": "xxxx",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "yyy",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "zzz",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

Модели /index.js

'use strict';

var fs        = require('fs');
var path      = require('path');
var Sequelize = require('sequelize');
var basename  = path.basename(__filename);
var env       = process.env.NODE_ENV || 'development';
var config    = require(__dirname + '/..\config\config.json')[env];
var db        = {};

if (config.use_env_variable) {
  var sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  var 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 => {
    var 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;

Миграции /create_user.js

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      firstName: {
        type: Sequelize.STRING
      },
      lastName: {
        type: Sequelize.STRING
      },
      email: {
        type: Sequelize.STRING
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Users');
  }
};
  • 1
    Да, в приведенном выше случае вам необходимо подключить обе базы данных по отдельности, и после успешного подключения вы можете использовать одну и ту же миграцию. Я использую две разные базы данных, одна находится в mongodb, а другая в sequelize, и оба работают отлично.
  • 0
    Спасибо, Priyank, не могли бы вы объяснить подробнее о подключении отдельно и запуске той же миграции
Показать ещё 5 комментариев
Теги:
sequelize.js
sequelize-cli

1 ответ

0

Измените файл config.js на это.

const DB_DETAILS = {
    "development" : {
        "pg_db_host" : "127.0.0.1",
        "pg_db_name" : "zzz",
        "pg_db_username" : "root",
        "pg_db_passoword" : "", 
        "pg_db_dialect" : "mysql",
        "db_host" : "127.0.0.1",
        "db_name" : "xxx",
        "db_username" : "root",
        "db_passoword" : "", 
        "db_dialect" : "mysql",
        "multipleStatements": true                      
    },
    "local" : {
        "pg_db_host" : "localhost",
        "pg_db_name" : "collaboration",
        "pg_db_username" : "postgres",
        "pg_db_passoword" : "postgres", 
        "pg_db_dialect" : "postgres",
        "db_host" : "localhost",
        "db_name" : "colloboration",
        "db_username" : "colloboration",
        "db_passoword" : "s6K2q2W509gx",
        "db_dialect" : "postgres",
        "multipleStatements": true                      
    },
    "production" : {
        "pg_db_host" : "localhost",
        "pg_db_name" : "collaboration",
        "pg_db_username" : "postgres",
        "pg_db_passoword" : "postgres", 
        "pg_db_dialect" : "postgres",
        "db_host" : "localhost",
        "db_name" : "colloboration",
        "db_username" : "colloboration",
        "db_passoword" : "s6K2q2W509gx",
        "db_dialect" : "postgres",
        "multipleStatements": true
    }
}

const env_db = DB_DETAILS[process.env.NODE_ENV];

const sequelize = new Sequelize(env_db.pg_db_name, env_db.pg_db_username, env_db.pg_db_passoword, {
      host: env_db.pg_db_host,
      dialect: env_db.pg_db_dialect,
      pool: {
        max: 5,
        min: 0,
        idle: 10000
      }
});

const sequelize1 = new Sequelize(env_db.db_name, env_db.db_username, env_db.db_passoword, {
    host: env_db.db_host,
    dialect: env_db.db_dialect,
    pool: {
      max: 5,
      min: 0,
      idle: 10000
    }
});

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
})
.catch(err => {
    console.error('Unable to connect to the database:', err);
});


sequelize1.authenticate().then(() => {
    console.log('Connection has been established successfully.');
})
.catch(err => {
    console.error('Unable to connect to the database:', err);
});

module.exports = { Sequelize , sequelize };

module.exports = { Sequelize1 , sequelize1 };

Также замените var db = {} на global.db = require ('./config.js'); // Конфигурируем путь к файлу в файлах index.js.

Noe вы можете использовать db.sequelize и db.sequelize1 соответственно

  • 0
    дайте мне знать, если это не сработало
  • 0
    Можете ли вы добавить файл миграции и файл сеялки?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню