2016-03-25 2 views
1

Ich erstelle eine Eins-zu-viele-Beziehung und lief einen seltsamen Fehler, wenn ich das zugehörige Modell an mein db-Objekt übergebe. Ich verstehe nicht, woher der Fehler kommt, da die Methode der Dokumentation folgt. Muss ich eine Referenz in mein Zielmodell schreiben?Sequelize TypeError Associate ist keine Funktion

Fehler:

db.DiscoverySource.associate(db); 
       ^

TypeError: db.DiscoverySource.associate is not a function 
    at Object.<anonymous> (/Users/user/Desktop/Projects/node/app/app/models/db-index.js:33:20) 

Source Modell (One) organization.js:

module.exports = function(sequelize, DataTypes) { 

var Organization = sequelize.define('organization', { 
    organizationId: { 
     type: DataTypes.INTEGER, 
     field: 'organization_id', 
     autoIncrement: true, 
     primaryKey: true 
    }, 
    organizationName: { 
     type: DataTypes.STRING, 
     field: 'organization_name' 
    }, 
    admin: DataTypes.STRING 
},{ 
    freezeTableName: true, 
    classMethods: { 
     associate: function(db) { 
      Organization.belongsToMany(db.User, { through: 'member', foreignKey: 'user_id' }), 
      Organization.hasMany(db.DiscoverySource, { foreignKey: 'organization_id' }); 
     }, 
    } 
}); 
    return Organization; 
} 

Target (Many) discovery-source.js:

module.exports = function(sequelize, DataTypes) { 

var DiscoverySource = sequelize.define('discovery_source', { 
    discoverySourceId: { 
     type: DataTypes.INTEGER, 
     field: 'discovery_source_id', 
     autoIncrement: true, 
     primaryKey: true 
    }, 
    discoverySource: { 
     type: DataTypes.STRING, 
     field: 'discovery_source_name' 
    }, 
    organizationId: { 
     type: DataTypes.TEXT, 
     field: 'organization_id' 
    }, 
},{ 
    freezeTableName: true, 
}); 
    return DiscoverySource; 
} 

db-index.js die Modelle verbindet:

var Sequelize = require('sequelize'); 
var path = require('path'); 
var config = require(path.resolve(__dirname, '..', '..','./config/config.js')); 
var sequelize = new Sequelize(config.database, config.username, config.password, { 
    host:'localhost', 
    port:'3306', 
    dialect: 'mysql' 
}); 

sequelize.authenticate().then(function(err) { 
    if (!!err) { 
     console.log('Unable to connect to the database:', err) 
    } else { 
     console.log('Connection has been established successfully.') 
    } 
}); 

var db = {} 

db.Member = sequelize.import(__dirname + "/member"); 

db.Organization = sequelize.import(__dirname + "/organization"); 

db.User = sequelize.import(__dirname + "/user"); 

db.DiscoverySource = sequelize.import(__dirname + "/discovery-source"); 

db.User.associate(db); 
db.Organization.associate(db); 
db.DiscoverySource.associate(db); 

db.sequelize = sequelize; 
db.Sequelize = Sequelize; 

sequelize.sync(); 

module.exports = db; 

Antwort

2

Sie bekommen einen Fehler, weil Sie nicht associate in classMethods für DiscoverySource definiert haben. Es sieht so aus, als müssten Sie das nicht anrufen, entfernen Sie einfach diese Zeile.

Verwandte Themen