具有Sequelizejs的Nodejs为每个模型使用单独的文件

时间:2013-02-15 05:53:28

标签: node.js sequelize.js

这是一个令人尴尬的初学者问题,但我只是想解决我对Sequelizejs的担忧。我想将每个模型拆分成自己的文件,以保持我的源组织。为此,我需要在每个文件的开头require("sequelize')var sequelize = new Sequelize('DB-Name', 'DB-User', 'DB-Password');

我的问题是,是否会为每个模型创建一个与数据库的新连接,还是会继续重复使用相同的连接?我应该放弃“每个文件一个模型”的整个概念,只创建一个主模型.js文件吗?

我是Node的新手,我仍然习惯了它的惯例。谢谢你的帮助!

2 个答案:

答案 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
  })
})