Multiple Sequelize Schema 覆盖第一个 schema

编程入门 行业动态 更新时间:2024-10-06 04:10:08

Multiple Sequelize Schema 覆盖<a href=https://www.elefans.com/category/jswz/34/1770358.html style=第一个 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
}

我做错了什么?

回答如下:

更多推荐

Multiple Sequelize Schema 覆盖第一个 schema

本文发布于:2024-05-30 14:26:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1770593.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:第一个   Sequelize   Multiple   schema   Schema

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!