16

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

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

我对 Node 很陌生,并且仍在习惯它的约定。谢谢您的帮助!

4

2 回答 2

17

每个模型都定义为自己的模块,您可以将其导出:

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阅读有关模块的更多信息,但上面的示例应该可以帮助您入门。

于 2013-02-15T11:30:25.570 回答
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
  })
})
于 2017-06-30T09:09:04.520 回答