Nodejs с Sequelizejs, используя отдельные файлы для каждой модели
это смущающе начинающий вопрос, но я просто хочу решить свои проблемы с Sequelizejs. Я хочу разделить каждую модель на свой собственный файл, чтобы мой источник был организован. Для этого мне нужно require("sequelize')
и var sequelize = new Sequelize('DB-Name', 'DB-User', 'DB-Password');
в начале каждого файла.
мой вопрос в том, создаст ли это новое соединение с базой данных для каждой модели или будет просто продолжать повторно использовать одно и то же соединение? Должен ли я отказаться от всей концепции "одна модель на файл" и просто создать мастер-модель.файл js?
Я очень новичок в Node и все еще привыкаю к его соглашениям. Спасибо за помощь!
2 ответов
каждая модель определяется как собственный модуль, который вы экспортируете:
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 но приведенный выше пример должен заставить вас начать.
в случае, если кто-то хочет использовать подход EcmaScript 6, есть пример решетки с объяснением в Sequelize documentation здесь.
// 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
})
}
метод import также может принимать обратный вызов в качестве аргумента.
sequelize.import('project', (sequelize, DataTypes) => {
return sequelize.define("project", {
name: DataTypes.STRING,
description: DataTypes.TEXT
})
})