Nodejs с Sequelizejs с использованием отдельных файлов на модель

Это неудобно начинающий вопрос, но я просто хочу решить свои проблемы в отношении Sequelizejs. Я хочу разделить каждую модель в свой собственный файл, чтобы сохранить источник. Для этого мне нужно require("sequelize') и var sequelize = new Sequelize('DB-Name', 'DB-User', 'DB-Password'); в начале каждого файла.

Мой вопрос: будет ли это создавать новое соединение с базой данных для каждой модели или просто будет использовать повторное использование того же соединения? Должен ли я отказаться от всей концепции "одна модель для файла" и просто создать файл master Models.js?

Я очень новичок в Node и до сих пор привык к его соглашениям. Спасибо за помощь!

Ответ 1

Каждая модель определяется как ее собственный модуль, который вы экспортируете:

module.exports = function(sequelize, DataTypes){
    return sequelize.define('Brand', {
        name: {
            type: DataTypes.STRING,
            unique: true,
            allowNull: false },
        description: {
            type: DataTypes.TEXT,
            allowNull: false },
        status: {
            type: DataTypes.INTEGER,
            unique: false,
            allowNull: true }
    })
};

Затем просто импортируйте модуль при инициализации Sequelize (и вы можете импортировать многие модели здесь):

var Sequelize = require("sequelize");
var config = require("../../config/config.js");
var sequelize = new Sequelize(config.database, config.username, config.password,
    { dialect: config.dialect, host: config.host, port: config.port,
      omitNull: true, logging: false });
var Brand = require("./Brand").Brand;

Вы можете прочитать больше о модулях в http://nodejs.org/api/modules.htm, но приведенный выше пример должен начать работу.

Ответ 2

В случае, если кто-то хочет использовать подход EcmaScript 6, есть отличный пример с объяснением в документации Sequelize здесь.

// in your server file - e.g. app.js
const Project = sequelize.import(__dirname + "/path/to/models/project")

// The model definition is done in /path/to/models/project.js
// As you might notice, the DataTypes are the very same as explained above
module.exports = (sequelize, DataTypes) => {
  return sequelize.define("project", {
    name: DataTypes.STRING,
    description: DataTypes.TEXT
  })
}

Метод импорта также может принимать обратный вызов в качестве аргумента.

sequelize.import('project', (sequelize, DataTypes) => {
  return sequelize.define("project", {
    name: DataTypes.STRING,
    description: DataTypes.TEXT
  })
})