导入Sequelize模型时出现Cannot read properties of undefined错误的原因?
问题原因
你遇到的TypeError: Cannot read properties of undefined (reading 'create')本质是:
model.js导出的是一个需要传入db和DataTypes参数的工厂函数,并非直接导出定义好的Test模型。index.js里用const { Test } = require('./model.js')解构的是这个函数,函数本身没有Test属性,导致Test变量为undefined,调用Test.create自然报错。
解决方案
提供两种常用的修复方式,按需选择:
方案一:通过数据库实例统一管理模型
调整db-init.js
在初始化数据库时,将模型挂载到db实例上,并导出db:
const { Sequelize, DataTypes } = require('sequelize'); const db = new Sequelize({ dialect: 'sqlite', storage: './database.sqlite', }); // 定义模型并挂载到db.models db.models.Test = require('./model.js')(db, DataTypes); db.sync({ force: true }).then(async () => { console.log('db connected'); }).catch(console.error); // 导出db实例 module.exports = db;
调整index.js
从db-init.js引入数据库实例,通过实例获取模型:
const db = require('./db-init.js'); (async () => { const test = await db.models.Test.create({ name: 'test', desc: 'hello world' }); console.log(test.name); })();
方案二:让模型文件自行初始化(单数据库实例场景适用)
调整db-init.js
提前导出db和DataTypes:
const { Sequelize, DataTypes } = require('sequelize'); const db = new Sequelize({ dialect: 'sqlite', storage: './database.sqlite', }); // 导出db和DataTypes供模型文件使用 module.exports = { db, DataTypes }; db.sync({ force: true }).then(async () => { console.log('db connected'); }).catch(console.error);
调整model.js
直接引入db实例定义模型,并导出:
const { db, DataTypes } = require('./db-init.js'); const Test = db.define('test', { name: DataTypes.STRING, desc: DataTypes.TEXT, }); module.exports = { Test };
index.js无需修改
此时const { Test } = require('./model.js')可以正常获取到定义好的模型。
内容的提问来源于stack exchange,提问作者TacoSnack
相关产品推荐
相关产品推荐

