You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:35:10