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

Sequelize调用create方法报错Cannot read property 'create' of undefined如何解决

问题原因
  • 你定义的模型模块导出的是接收sequelize、DataTypes两个入参的工厂函数,路由中直接require('../models/Problems')拿到的是未执行的函数本身,不是初始化完成的Sequelize模型实例,不存在create方法,调用时就会抛出该错误。
  • 你没有提前初始化Sequelize数据库连接实例,也没有完成模型的注册流程。
解决方案

方案1:统一注册模型(推荐)

在models目录下新建index.js作为模型统一注册入口,代码如下:

const Sequelize = require('sequelize');
// 替换为你自己的数据库连接配置
const sequelize = new Sequelize('数据库名称', '数据库账号', '数据库密码', {
  host: '127.0.0.1',
  dialect: 'mysql' // 根据实际使用的数据库类型调整,可选postgres、mariadb、sqlite等
});

const db = {};
// 传入实例完成模型初始化
db.Problems = require('./Problems')(sequelize, Sequelize.DataTypes);

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

修改路由文件的模型导入逻辑:

// 从统一注册入口导入已初始化的模型
const { Problems } = require('../models');

方案2:路由内直接初始化(仅测试用)

直接修改路由文件的导入部分,手动完成模型初始化:

const Sequelize = require('sequelize');
// 初始化数据库连接
const sequelize = new Sequelize('数据库名称', '数据库账号', '数据库密码', {
  host: '127.0.0.1',
  dialect: 'mysql'
});
// 执行模型工厂函数拿到可用的模型实例
const Problems = require('../models/Problems')(sequelize, Sequelize.DataTypes);
额外注意

你当前模型代码中sequelize.define("Posts", { ... })第一个参数为Posts,Sequelize默认会自动生成复数形式的表名posts,如果你期望表名和模型名匹配,可修改第一个参数为Problem,或在define的第三个参数中手动指定表名:

sequelize.define("Posts", {
  // 字段定义不变
}, {
  tableName: 'problems' // 手动指定实际表名
})

内容的提问来源于stack exchange,提问作者Никита Шапаренко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:18:03