最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Multiple Sequelize Schema 覆盖第一个 schema

网站源码admin40浏览0评论

Multiple Sequelize Schema 覆盖第一个 schema

Multiple Sequelize Schema 覆盖第一个 schema

我正在使用 Sequelize ORM 连接到 2 个模式。在我的模型文件夹中,我有 2 个文件夹和一个索引文件。这 2 个文件夹分别是租户和超级管理员,每个文件夹都包含他们的 model.js 文件。在 index.js 文件中,我有以下代码:

'use strict';

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

//Extract the database information into an array
const databases = Object.keys(config.databases);

//Loop over the array and create a new Sequelize instance for every database from config.json
for (let i = 0; i < databases.length; ++i) {
  let database = databases[i];
  let dbPath = config.databases[database];
  //Store the database connection in our db object
  db[database] = new Sequelize(
    dbPath.database,
    dbPath.username,
    dbPath.password,
    dbPath
  );
}

/**Add the Database Models**/
// Add models from Tenants folder
fs.readdirSync(__dirname + '/tenants')
  .filter(
    (file) =>
      file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js'
  )
  .forEach((file) => {
    const model = require(path.join(__dirname + '/tenants', file))(
      db[databases[0]],
      Sequelize.DataTypes
    );
    db[model.name] = model;
  });
// Add models from Superadmin folder
fs.readdirSync(__dirname + '/superadmin')
  .filter(
    (file) =>
      file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js'
  )
  .forEach((file) => {
    const model = require(path.join(__dirname + '/superadmin', file))(
      db[databases[1]],
      Sequelize.DataTypes
    );
    db[model.name] = model;
  });
Object.keys(db).forEach((modelName) => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});
console.log(db);
module.exports = db;

但是,导出的db对象没有2个sequelize实例(superadmin和tenants),只有tenants:

{
  tenants: tenants,
  superadmin: <ref *1> Sequelize {
    options: {
      dialect: 'mysql',
      dialectModule: null,
      dialectModulePath: null,
      host: '127.0.0.1',
      protocol: 'tcp',
      define: {},
      query: {},
      sync: {},
      timezone: '+00:00',
      standardConformingStrings: true,
      logging: [Function: log],
      omitNull: false,
      native: false,
      replication: false,
      ssl: undefined,
      pool: {},
      quoteIdentifiers: true,
      hooks: {},
      retry: [Object],
      transactionType: 'DEFERRED',
      isolationLevel: null,
      databaseVersion: 0,
      typeValidation: false,
      benchmark: false,
      minifyAliases: false,
      logQueryParameters: false,
      attributeBehavior: 'throw',
      username: 'ironhunter',
      password: 'ironhunter',
      database: 'superadmin'
    },
    config: {
      database: 'superadmin',
      username: 'ironhunter',
      password: 'ironhunter',
      host: '127.0.0.1',
      port: 3306,
      pool: {},
      protocol: 'tcp',
      native: false,
      ssl: undefined,
      replication: false,
      dialectModule: null,
      dialectModulePath: null,
      keepDefaultTimezone: undefined,
      dialectOptions: undefined
    },
    dialect: MysqlDialect {
      sequelize: [Circular *1],
      connectionManager: [ConnectionManager],
      queryGenerator: [MySQLQueryGenerator],
      queryInterface: [MySQLQueryInterface]
    },
    queryInterface: MySQLQueryInterface {
      sequelize: [Circular *1],
      queryGenerator: [MySQLQueryGenerator]
    },
    models: {
      articles: articles,
      categories: categories,
      notifications: notifications,
      payments: payments,
      plans: plans,
      subscribers: subscribers,
      tenants: tenants,
      uploaded: uploaded
    },
    modelManager: ModelManager { models: [Array], sequelize: [Circular *1] },
    connectionManager: ConnectionManager {
      sequelize: [Circular *1],
      config: [Object],
      dialect: [MysqlDialect],
      versionPromise: null,
      dialectName: 'mysql',
      pool: [Pool],
      lib: [Object]
    }
  },
  appointments: appointments,
  Breaks: Breaks,
  categories: categories,
  cDetails: cDetails,
  Coupons: Coupons,
  Coupons_Usage: Coupons_Usage,
  customerNotes: customerNotes,
  customers: customers,
  Giftcards: Giftcards,
  Giftcards_Usage: Giftcards_Usage,
  holidays: holidays,
  locations: locations,
  payments: payments,
  Reviews: Reviews,
  roles: roles,
  services: services,
  specialDays: specialDays,
  staff: staff,
  SubServices: SubServices,
  tax: tax,
  Tenants: Tenants,
  timesheets: timesheets,
  Users: Users,
  articles: articles,
  notifications: notifications,
  plans: plans,
  subscribers: subscribers,
  uploaded: uploaded
}

但是如果我在从 superadmin 文件夹添加模型之前尝试控制台记录 db 对象,我会得到 2 个 sequelize 实例:

{
  tenants: <ref *1> Sequelize {
    options: {
      dialect: 'mysql',
      dialectModule: null,
      dialectModulePath: null,
      host: '127.0.0.1',
      protocol: 'tcp',
      define: {},
      query: {},
      sync: {},
      timezone: '+00:00',
      standardConformingStrings: true,
      logging: [Function: log],
      omitNull: false,
      native: false,
      replication: false,
      ssl: undefined,
      pool: {},
      quoteIdentifiers: true,
      hooks: {},
      retry: [Object],
      transactionType: 'DEFERRED',
      isolationLevel: null,
      databaseVersion: 0,
      typeValidation: false,
      benchmark: false,
      minifyAliases: false,
      logQueryParameters: false,
      attributeBehavior: 'throw',
      username: 'ironhunter',
      password: 'ironhunter',
      database: 'tenants'
    },
    config: {
      database: 'tenants',
      username: 'ironhunter',
      password: 'ironhunter',
      host: '127.0.0.1',
      port: 3306,
      pool: {},
      protocol: 'tcp',
      native: false,
      ssl: undefined,
      replication: false,
      dialectModule: null,
      dialectModulePath: null,
      keepDefaultTimezone: undefined,
      dialectOptions: undefined
    },
    dialect: MysqlDialect {
      sequelize: [Circular *1],
      connectionManager: [ConnectionManager],
      queryGenerator: [MySQLQueryGenerator],
      queryInterface: [MySQLQueryInterface]
    },
    queryInterface: MySQLQueryInterface {
      sequelize: [Circular *1],
      queryGenerator: [MySQLQueryGenerator]
    },
    models: {
      appointments: appointments,
      Breaks: Breaks,
      categories: categories,
      cDetails: cDetails,
      Coupons: Coupons,
      Coupons_Usage: Coupons_Usage,
      customerNotes: customerNotes,
      customers: customers,
      Giftcards: Giftcards,
      Giftcards_Usage: Giftcards_Usage,
      holidays: holidays,
      locations: locations,
      payments: payments,
      Reviews: Reviews,
      roles: roles,
      services: services,
      specialDays: specialDays,
      staff: staff,
      SubServices: SubServices,
      tax: tax,
      Tenants: Tenants,
      timesheets: timesheets,
      Users: Users
    },
    modelManager: ModelManager { models: [Array], sequelize: [Circular *1] },
    connectionManager: ConnectionManager {
      sequelize: [Circular *1],
      config: [Object],
      dialect: [MysqlDialect],
      versionPromise: null,
      dialectName: 'mysql',
      pool: [Pool],
      lib: [Object]
    }
  },
  superadmin: <ref *2> Sequelize {
    options: {
      dialect: 'mysql',
      dialectModule: null,
      dialectModulePath: null,
      host: '127.0.0.1',
      protocol: 'tcp',
      define: {},
      query: {},
      sync: {},
      timezone: '+00:00',
      standardConformingStrings: true,
      logging: [Function: log],
      omitNull: false,
      native: false,
      replication: false,
      ssl: undefined,
      pool: {},
      quoteIdentifiers: true,
      hooks: {},
      retry: [Object],
      transactionType: 'DEFERRED',
      isolationLevel: null,
      databaseVersion: 0,
      typeValidation: false,
      benchmark: false,
      minifyAliases: false,
      logQueryParameters: false,
      attributeBehavior: 'throw',
      username: 'ironhunter',
      password: 'ironhunter',
      database: 'superadmin'
    },
    config: {
      database: 'superadmin',
      username: 'ironhunter',
      password: 'ironhunter',
      host: '127.0.0.1',
      port: 3306,
      pool: {},
      protocol: 'tcp',
      native: false,
      ssl: undefined,
      replication: false,
      dialectModule: null,
      dialectModulePath: null,
      keepDefaultTimezone: undefined,
      dialectOptions: undefined
    },
    dialect: MysqlDialect {
      sequelize: [Circular *2],
      connectionManager: [ConnectionManager],
      queryGenerator: [MySQLQueryGenerator],
      queryInterface: [MySQLQueryInterface]
    },
    queryInterface: MySQLQueryInterface {
      sequelize: [Circular *2],
      queryGenerator: [MySQLQueryGenerator]
    },
    models: {},
    modelManager: ModelManager { models: [], sequelize: [Circular *2] },
    connectionManager: ConnectionManager {
      sequelize: [Circular *2],
      config: [Object],
      dialect: [MysqlDialect],
      versionPromise: null,
      dialectName: 'mysql',
      pool: [Pool],
      lib: [Object]
    }
  },
  appointments: appointments,
  Breaks: Breaks,
  categories: categories,
  cDetails: cDetails,
  Coupons: Coupons,
  Coupons_Usage: Coupons_Usage,
  customerNotes: customerNotes,
  customers: customers,
  Giftcards: Giftcards,
  Giftcards_Usage: Giftcards_Usage,
  holidays: holidays,
  locations: locations,
  payments: payments,
  Reviews: Reviews,
  roles: roles,
  services: services,
  specialDays: specialDays,
  staff: staff,
  SubServices: SubServices,
  tax: tax,
  Tenants: Tenants,
  timesheets: timesheets,
  Users: Users
}

我做错了什么?

回答如下:
发布评论

评论列表(0)

  1. 暂无评论