【问题标题】:Express Js + Sequelize : How to load models?Express Js + Sequelize:如何加载模型?
【发布时间】:2015-10-18 03:45:45
【问题描述】:

我正在构建我的第一个 node.js 应用程序。我使用 express js 和 sequelize 来处理 Data 对象。我想构建一个包含我的应用程序的所有模型的模型对象,但是这样做会出错。是什么原因造成的?

在模型/User.js 中:

module.exports = function(sequelize, DataTypes) {
    return sequelize.define('User', {
        id : DataTypes.INTEGER,
        firstName : DataTypes.STRING,
        lastName : DataTypes.STRING,
        email : DataTypes.STRING,
        login : DataTypes.STRING,
        password : DataTypes.STRING,
        isAdmin : DataTypes.BOOLEAN
     });
};

在模型/Project.js 中:

module.exports = function(sequelize, DataTypes) {
return sequelize.define('Project', {
    id : DataTypes.INTEGER,
    projectName : DataTypes.STRING
});
};

在模型/Models.js 中:

var Sequelize = require('sequelize');
var env = process.env.NODE_ENV || "development";
var config = require(__dirname + '/../config/config.json')[env];

// initialize database connection
var sequelize = new Sequelize(config.name, config.username, config.password);

// load models
var models = [ 'Project', 'User' ];
models.forEach(function(model) {
    console.log(__dirname + '/' + model);
    console.log(sequelize.import(__dirname + '/' + model));
    module.exports[model] = sequelize.import(__dirname + '/' + model);
});

// describe relationships
(function(m) {
    m.Project.belongsToMany(m.User, {
        through : 'UserProject'
    });
    m.User.belongsToMany(m.Project, {
        through : 'UserProject'
    });
})(module.exports);

// export connection
module.exports.sequelize = sequelize;

当我尝试运行我的 app.js 时,我收到以下错误:

/home/julien/Developpements/nodejs/rmtool/node_modules/sequelize/lib/utils.js:51 转 str.trim().replace(/[-_\s]+(.)?/g, function(match, c){ return c.toUpperCa ^ TypeError:无法读取未定义的属性“toUpperCase” 在/home/julien/Developpements/nodejs/rmtool/node_modules/sequelize/lib/utils.js:51:75 在 String.replace (本机) 在 Object.module.exports.camelize (/home/julien/Developpements/nodejs/rmtool/node_modules/sequelize/lib/utils.js:51:23) 在 Object.module.exports.camelizeIf (/home/julien/Developpements/nodejs/rmtool/node_modules/sequelize/lib/utils.js:18:22) 在新的 BelongsToMany (/home/julien/Developpements/nodejs/rmtool/node_modules/sequelize/lib/associations/belongs-to-many.js:112:56) 在 Mixin.belongsToMany (/home/julien/Developpements/nodejs/rmtool/node_modules/sequelize/lib/associations/mixin.js:297:21) 在/home/julien/Developpements/nodejs/rmtool/models/Model.js:20:13 在对象。 (/home/julien/Developpements/nodejs/rmtool/models/Model.js:26:4) 在 Module._compile (module.js:460:26) 在 Object.Module._extensions..js (module.js:478:10) 在 Module.load (module.js:355:32) 在 Function.Module._load (module.js:310:12) 在 Module.require (module.js:365:17) 在需要(module.js:384:17) 在对象。 (/home/julien/Developpements/nodejs/rmtool/routes/login.js:9:13) 在 Module._compile (module.js:460:26)

【问题讨论】:

    标签: node.js express sequelize.js


    【解决方案1】:

    当规范形式更像是:声明关系似乎很奇怪:

    module.exports = function(sequelize, DataTypes) {
      var User = sequelize.define('User', {
        id : DataTypes.INTEGER,
        firstName : DataTypes.STRING,
        lastName : DataTypes.STRING,
        email : DataTypes.STRING,
        login : DataTypes.STRING,
        password : DataTypes.STRING,
        isAdmin : DataTypes.BOOLEAN
     }, {
      classMethods: {
        associate: function(models) {
          User.belongsToMany(models.Project, {
            through: 'UserProject'
          });
        }
      }
     });
    
      return User;
    };
    

    在所有模型加载后调用associate方法以避免依赖问题。

    也可以尝试调用它models/index.js,这样你就可以require('./models')

    【讨论】:

    • 事实上我认为它不起作用,因为似乎排除了关联。我无法通过关联查询我的模型。很难找到关于该主题的完整文档...
    • 发布与此问题相关的新问题。通常像user.getProjects() 这样的东西会这样做。
    • 当我尝试运行 require('./models'); 时,我得到了 Error: Cannot find module './models'
    • @NobleUplift 请尝试在此处将其打包为一个单独的问题,这可能是情境性的。在这种情况下,有一个 models/index.js 文件相对于相关文件。
    猜你喜欢
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多