首次使用Sequelize定义模型报错:gallery.belongsTo参数非Model子类
问题
首次使用Sequelize,定义GalleryType和Gallery两个模型后运行报错,求助修复。
GalleryType模型代码:
const GalleryType = sequelize.define("gallerytype",{ _id: { type: DataTypes.INTEGER, autoIncrement: true, allowNull: false, primaryKey:true }, title:{ type: DataTypes.STRING, allowNull: false, unique: { arg:true, name: 'Unique field', msg: "Gallery type must be unique" } } }) GalleryType.hasMany(Gallery, {foreignKey: 'type', onDelete: 'CASCADE'})
Gallery模型代码:
const Gallery = sequelize.define("gallery",{ _id: { type: DataTypes.INTEGER, autoIncrement: true, allowNull: false, primaryKey:true }, title:{ type: DataTypes.STRING, allowNull: false }, picture: DataTypes.STRING, url:{ type: DataTypes.STRING, allowNull: false } }) Gallery.belongsTo(GalleryType, { foreignKey: 'type', targetKey: '_id' });
报错信息:
错误:gallery.belongsTo 传入的对象不是 Sequelize.Model 的子类
解决方法
- 调整模型定义与关联的顺序:当前代码中,定义GalleryType时就调用了
hasMany(Gallery),但此时Gallery模型还未被定义,变量Gallery只是未初始化的空值,并非Sequelize.Model实例。正确做法是先完成所有模型定义,再建立关联:// 1. 先定义所有模型 const GalleryType = sequelize.define("gallerytype",{ _id: { type: DataTypes.INTEGER, autoIncrement: true, allowNull: false, primaryKey:true }, title:{ type: DataTypes.STRING, allowNull: false, unique: { arg:true, name: 'Unique field', msg: "Gallery type must be unique" } } }); const Gallery = sequelize.define("gallery",{ _id: { type: DataTypes.INTEGER, autoIncrement: true, allowNull: false, primaryKey:true }, title:{ type: DataTypes.STRING, allowNull: false }, picture: DataTypes.STRING, url:{ type: DataTypes.STRING, allowNull: false } }); // 2. 再建立关联 GalleryType.hasMany(Gallery, {foreignKey: 'type', onDelete: 'CASCADE'}); Gallery.belongsTo(GalleryType, { foreignKey: 'type', targetKey: '_id' }); - 跨文件模型的导入检查:如果两个模型分属不同文件,要确保导入的是已完成定义的Sequelize模型实例,而非未导出/未定义的变量。比如在GalleryType文件中导入Gallery时,确认Gallery文件已正确导出模型。
- 核对变量名拼写:检查关联代码中使用的模型变量名(如
Gallery、GalleryType)是否和定义时完全一致,避免因拼写错误导致传入非模型对象。
内容的提问来源于stack exchange,提问作者Bibisoltan Rustamowa
相关产品推荐
相关产品推荐

