这是一个令人尴尬的初学者问题,但我只是想解决我对Sequelizejs的担忧。我想将每个模型拆分成自己的文件,以保持我的源组织。为此,我需要在每个文件的开头require("sequelize')
和var sequelize = new Sequelize('DB-Name', 'DB-User', 'DB-Password');
。
我的问题是,是否会为每个模型创建一个与数据库的新连接,还是会继续重复使用相同的连接?我应该放弃“每个文件一个模型”的整个概念,只创建一个主模型.js文件吗?
我是Node的新手,我仍然习惯了它的惯例。谢谢你的帮助!
答案 0 :(得分:14)
每个模型都定义为您自己导出的模块:
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上阅读有关模块的更多信息,但上面的示例可以帮助您入门。
答案 1 :(得分:2)
如果想要使用EcmaScript 6方法,可以在Sequelize文档中here进行解释。
// 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
})
})