第一个 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
发布评论