Sequelize无法识别Model:调用findAll时出现未定义类型错误
问题分析与解决方案
核心问题:模型加载代码语法错误
你在Index.js的模型加载循环里存在语法错误,导致模型未被正确初始化并挂载到db对象上:
原错误代码:
const model = require(path.join(__dirname, file));(sequelize, Sequelize.DataTypes);
这里的分号打断了函数调用逻辑,require返回的模型定义函数没有被执行,model只是函数本身而非初始化后的模型实例;后面的(sequelize, Sequelize.DataTypes)变成了无意义的独立表达式,完全起不到传入参数初始化模型的作用。
修复步骤
- 修正模型加载代码
将Index.js中的错误行修改为:
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
这样才能正确调用模型定义函数,生成Sequelize模型实例并赋值给model,进而挂载到db对象上。
- 修正模型文件拼写错误(可选但推荐)
你的Product模型里将attributes拼写成了atributes,虽当前不影响模型加载,但可能引发后续配置异常,建议修正:
// 原错误代码 let atributes = { ... } // 修正为 let attributes = { ... }
- 验证修复结果
修改完成后重启服务,调用db.Product.findAll()将不再报undefined错误。此时用res.send(Object.keys(db))应返回["Product","sequelize","Sequelize"],说明模型已正确挂载。
额外检查点
- 确保Product模型文件名为
Product.js(大小写完全匹配),Index.js按文件名加载模型,大小写不匹配会导致模型无法被识别。 - 确认
config/config.js中的数据库配置正确,能正常连接MySQL,避免后续查询出现连接类错误。
内容的提问来源于stack exchange,提问作者Jose M Muñoz
相关产品推荐
相关产品推荐

