Хорошо, после хорошего ночного сна мой мозг снова начал работать.
- Во-первых. Я не понимаю, почему все примеры загрузки моделей создают
db object
- для хранения всех моделей.
db[model.name] = model
- ссылка на пакет Sequelize
db.Sequelize = Sequelize
- ссылка на соединение
db.sequelize = sequelize
когда экземпляр const sequelize = new Sequelize()
- это все, что вам нужно.
Учитывая model definition
, как в ОП.
Файл: app/models/user.js
module.exports = (sequelize, DataTypes) => {
let Schema = sequelize.define(
"user",
{
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
BlaBla:{}
},
{ // options
sync: {force: false},
freezeTableName: true,
timestamps: true
});
return Schema;
};
И такой вот бутстрап:
Файл: config/sequelize.js
const Sequelize = require("sequelize");
const sequelize = new Sequelize(config.dbname, config.dbuser, config.dbpass, {
dialect: "mysql",
host: config.dbhost,
port: 3306,
define: {
engine: 'MYISAM',
timestamps: true,
}
});
fs
.readdirSync(path.join(config.models))
.filter(file => ~file.indexOf('.js'))
.forEach((file) => {
let model = sequelize["import"](path.join(config.models, file));
model.sync(model.options.sync);
});
module.exports = sequelize;
Тогда у вас есть для каждой модели синхронизация.
Затем в server.js
:
const sequelize = require(join(__dirname,"config/sequelize"));
/* debug */
Object.keys(sequelize.models).forEach(function(name) {
console.log('sequelize model:',name);
});
console.log('Checking DB connection...');
sequelize
.authenticate()
.then(() => {
console.log('Successfully connected to:', config.dbname);
})
.catch(err => {
console.error('Unable to connect to the database:', err);
process.exit;
});
const User = sequelize.model('user');
Это приводит к тому, что user
NOT удаляется, но company
IS удаляется.
Вот вывод консоли из цикла:
> node server.js
config/index.js { dbhost: '192.168.1.70',
dbport: 3306,
dbname: 'dbdev',
dbuser: 'dbdev',
dbpass: '********',
mode: 'development',
root: 'C:\\Workspace\\Github\\******',
models: 'C:\\Workspace\\Github\\******\\app\\models',
sync: false }
Creating DB connection...
Loading Schema: company
company sync { force: true }
Loading Schema: user
user sync { force: false }
sequelize model: company
sequelize model: user
Checking DB connection...
Server fetching: user
Executing (default): SELECT 1+1 AS result
Executing (default): DROP TABLE IF EXISTS `company`;
Executing (default): CREATE TABLE IF NOT EXISTS `user` (`id` INTEGER UNSIGNED auto_increment , `login` VARCHAR(45) UNIQUE, `password` VARCHAR(255), `fname` VARCHAR(45), `lname` VARCHAR(45), `email` VARCHAR(128), `phone` VARCHAR(20), `company` INTEGER UNSIGNED, `createdby` INTEGER UNSIGNED, `access` INTEGER, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=MYISAM;
Successfully connected to: dbdev
Executing (default): SHOW INDEX FROM `user`
Executing (default): CREATE TABLE IF NOT EXISTS `company` (`id` INTEGER auto_increment , `name` VARCHAR(255), `type` INTEGER, `createdby` INTEGER, `access` INTEGER, PRIMARY KEY (`id`)) ENGINE=MYISAM;
Executing (default): SHOW INDEX FROM `company`
Я мог бы взглянуть на migrations
, но сейчас я бы предпочел выполнить начальное моделирование в файлах определений по мере необходимости.
Я пропустил какой-то важный момент, или это решение "летает"?