首页 文章

Express Js Sequelize:如何加载模型?

提问于
浏览
2

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

In models/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
     });
};

In models/Project.js :

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

In models/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:无法在String.replace(native)读取/home/julien/Developpements/nodejs/rmtool/node_modules/sequelize/lib/utils.js:51:75中未定义的属性'toUpperCase'在Object.module.exports.camelize(/home/julien/Developpements/nodejs/rmtool/node_modules/sequelize/lib/utils.js:51:23)at Object.module.exports.camelizeIf(/ home / julien / Developpements / nodejs / rmtool / node_modules / sequelize / lib / utils.js:18:22)at new BelongsToMany(/home/julien/Developpements/nodejs/rmtool/node_modules/sequelize/lib/associations/belongs-to-many.js:112 :56)在/ home / julien / Developpements / nodejs / rmtool / models / Model的Mixin.belongsToMany(/home/julien/Developpements/nodejs/rmtool/node_modules/sequelize/lib/associations/mixin.js:297:21) .js:20:13 at Object . (/home/julien/Developpements/nodejs/rmtool/models/Model.js:26:4)在Module._compile(modu le.js:460:26)在Function.Module._load的Module.load(module.js:355:32)的Object.Module._extensions..js(module.js:478:10)处(module.js: 310:12)在Module.require(module.js:365:17)at对象的require(module.js:384:17) . (/home/julien/Developpements/nodejs/rmtool/routes/login.js:9:13)在Module._compile(module.js:460:26)

1 回答

  • 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')

相关问题