Node.js Sequelize TypeError关联不是一个函数
我正在创建一对多关系,当我将关联的模型传递给我的db对象时,遇到了一个奇怪的错误。我不明白错误从何而来,因为方法遵循文档。我需要在我的目标模型中写一个引用吗 错误:Node.js Sequelize TypeError关联不是一个函数,node.js,express,sequelize.js,Node.js,Express,Sequelize.js,我正在创建一对多关系,当我将关联的模型传递给我的db对象时,遇到了一个奇怪的错误。我不明白错误从何而来,因为方法遵循文档。我需要在我的目标模型中写一个引用吗 错误: db.DiscoverySource.associate(db); ^ TypeError: db.DiscoverySource.associate is not a function at Object.<anonymous> (/Users/user/Desktop/
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)
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;
}
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;
}
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;
Target(Many)discovery source.js:
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)
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;
}
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;
}
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;
db-index.js加入模型:
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)
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;
}
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;
}
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;
您收到一个错误,因为您没有在
classMethods
中为DiscoverySource定义associate
。看起来你不需要这样称呼它,所以干脆把那一行删掉