【问题标题】:Nodejs with Sequelizejs using separate files per model带有 Sequelizejs 的 Nodejs 对每个模型使用单独的文件
【发布时间】:2013-01-31 02:16:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: node.js sequelize.js


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

    【讨论】:

    • 我刚刚找到了一个与您发布的内容非常相似的好解决方案。唯一的区别是我使用了sequelize.import('./File') 函数。无论哪种方式都有效!感谢您提供另一种选择。
    • dankohn,我尝试了上面的代码,我必须像下面一样传递 sequelize 和 Sequelize 的引用,请确认我是否遗漏了导致无法使用确切代码的内容,因为您共享了 var Brand = require("./dto/brand")(sequelize, Sequelize);跨度>
    • 我的代码已有 5 年的历史,因此请根据需要进行编辑以使其在当前版本中工作。
    • @DanKohn fyi - nodejs 模块链接断开
    • 我得到了它:const { Sequelize, Model, DataTypes, Op } = require('sequelize'); 然后const Brand= require('../path/to/brand.js')(sequelize, DataTypes)
    【解决方案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
      })
    }
    

    导入方法也可以接受回调作为参数。

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 2011-07-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    相关资源
    最近更新 更多