Sequelize导入外部模型文件时提示call.hasMany is not a function错误如何解决
错误原因与修复方案
你遇到的报错核心原因是拆分后的模型文件导出规则和引入调用逻辑不匹配,具体问题和修复步骤如下:
1. 修正拆分模型文件的代码
当前call.model.js导出的是模型工厂函数,但既没有返回生成的模型实例,内部类型定义的依赖也没有正确对应,其他拆分的模型文件也要同步修改:
const { Sequelize } = require('sequelize'); module.exports = (sequelize, DataTypes) => { const call = sequelize.define('call', { id: { type: DataTypes.BIGINT, allowNull: false, primaryKey: true, autoIncrement: true, field: 'id' }, version: { allowNull: false, type: DataTypes.BIGINT, field: 'version' }, startDate: { allowNull: false, type: DataTypes.DATE, field: 'start_date' } },{ freezeTableName:true, timestamps: false }); return call; // 必须返回模型实例,外部才能拿到可用的模型对象 }
所有拆分的session.model.js、session_extra_data.model.js都要做两点调整:
- 工厂函数末尾返回定义好的模型实例
- 内部类型定义统一用参数传入的
DataTypes,或者顶部单独引入Sequelize对象
2. 修正主入口的模型引入逻辑
你直接require拿到的是模型工厂函数,不是可用的模型实例,需要传入参数执行后才能调用模型关联方法:
const {Sequelize, DataTypes} = require('sequelize'); const sequelize = new Sequelize('###############') // Example for postgres // 引入后执行工厂函数,传入参数拿到模型实例 const call = require("./models/call.model.js")(sequelize, DataTypes) const session = require("./models/session.model.js")(sequelize, DataTypes) const session_extra_data = require("./models/session_extra_data.model.js")(sequelize, DataTypes) // 后续的关联逻辑、查询逻辑保持不变即可
附加注意事项
现有查询代码里的嵌套关联配置存在拼写错误:indlude需要改为正确的include,否则嵌套关联不会生效。
内容的提问来源于stack exchange,提问作者Tayyab
相关产品推荐
相关产品推荐

