我的数据库有用户和订单模型。但是当我启动脚本时抛出异常: User.hasMany 不是一个函数。
// ./models/user.js
const { Sequelize, DataTypes } = require('sequelize');
module.exports = (sequelize) => {
const User = sequelize.define('User', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
autoIncrement: true,
primaryKey: true
},
username: {
type: DataTypes.STRING,
allowNull: false
}
});
return User;
};
// ./models/order.js
const { Sequelize, DataTypes } = require('sequelize');
const { User } = require('./user')
module.exports = (sequelize) => {
const Order = sequelize.define('Order', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
autoIncrement: true,
primaryKey: true
},
name: {
type: DataTypes.STRING
},
userId: {
type: DataTypes.INTEGER,
references: {
model: User,
key: 'id'
}
}
});
return Order;
};
// index.js
const User = require('./models/user');
const Order = require('./models/order');
User.hasMany(Order, { foreignKey: 'userId' });
Order.belongsTo(User, { foreignKey: 'userId' });
sequelize.sync()
.then(() => {
console.log('Database & tables created')
});
我尝试在模型内部添加通信:
const { Sequelize, DataTypes } = require('sequelize');
const Order = require("./order");
module.exports = (sequelize) => {
const User = sequelize.define('User', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
autoIncrement: true,
primaryKey: true
},
username: {
type: DataTypes.STRING,
allowNull: false
}
});
User.hasMany(Order, { foreignKey: 'userId' });
return User;
};
const { Sequelize, DataTypes } = require('sequelize');
const { User } = require('./user')
module.exports = (sequelize) => {
const Order = sequelize.define('Order', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
autoIncrement: true,
primaryKey: true
},
name: {
type: DataTypes.STRING
},
userId: {
type: DataTypes.INTEGER,
references: {
model: User,
key: 'id'
}
}
});
Order.belongsTo(User, { foreignKey: 'userId' });
return Order;
};
但那是另一个问题
(节点:9264)警告:在循环依赖中访问模块导出的不存在的属性“用户” (使用
显示警告的创建位置) 执行(默认):SELECT 1+1 AS 结果node --trace-warnings ...
首先,您需要从模型模块中删除所有交叉引用:
order.js
//const { User } = require('./user')
userId: {
type: DataTypes.INTEGER,
references: {
model: 'User',
key: 'id'
}
}
其次,您需要注册模型,调用其构造函数并在那里传递
sequelize
实例,因为所有模型都作为构造函数导出,而不是作为现成的模型实例导出:
index.js
const User = require('./models/user')(sequelize);
const Order = require('./models/order')(sequelize);
User.hasMany(Order, { foreignKey: 'userId' });
Order.belongsTo(User, { foreignKey: 'userId' });
sequelize.sync()
.then(() => {
console.log('Database & tables created')
});
请参阅我的其他答案以了解如何正确注册模型及其关联