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

Sequelize报No Sequelize instance passed错误如何排查

问题根因

两个报错分别对应独立的代码问题:

  1. 第一个TypeError: Cannot read property 'create' of undefined报错:你的User模型采用工厂函数形式导出(导出内容是需要传入sequelize实例、DataTypes才能返回模型类的函数),直接require("../models/User")拿到的是工厂函数本身,不是包含User属性的对象,解构得到的User值为undefined,调用create方法自然报错。
  2. 第二个No Sequelize instance passed报错:Sequelize模型初始化的init方法第二个配置参数,要求必须传入**小写键名sequelize**指向数据库实例,你在User.js中写的是大写开头的Sequelize作为配置键,Sequelize识别不到传入的实例,因此抛出该错误。
    额外问题:你修改完models/index.js之后,控制器里的模型引入路径没有同步修改,还是错误的直接引入User.js文件的写法。
修复步骤

按顺序修改以下3处代码即可解决问题:

  • 修改models/User.js的模型初始化配置,修正sequelize实例的键名,同时给id字段补充主键约束、修正password字段的非空配置
  • 修改controllers/user.js的模型引入路径,从models目录入口文件引入已注册的模型
  • 删除测试用的主动抛错逻辑,避免接口正常创建用户后仍返回错误

修正后代码片段

models/User.js

const { Model } = require("sequelize");

// 形参第一个是sequelize实例,第二个是DataTypes,统一小写命名避免和Sequelize类混淆
module.exports = (sequelize, DataTypes) => {
  class User extends Model {
    toJSON() {
      return {
        ...this.get(),
        password: undefined,
      };
    }
  }
  User.init(
    {
      // 补充primaryKey主键约束
      id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true },
      nom: { type: DataTypes.STRING, allowNull: false },
      prenom: { type: DataTypes.STRING, allowNull: false },
      email: {
        type: DataTypes.STRING,
        allowNull: false,
        validate: { notNull: true, notEmpty: true, isEmail: true },
      },
      status: { type: DataTypes.STRING, allowNull: false },
      // Sequelize非空约束用allowNull,原写法required是Mongoose的语法
      password: { type: DataTypes.STRING, allowNull: false },
    },
    // 配置键名必须为小写sequelize,指向传入的数据库实例
    { sequelize, tableName: "users", modelName: "User" }
  );
  return User;
};

controllers/user.js

/*const bcrypt = require("bcrypt");
const jwt = require("jsonwebtoken");*/
// 从models入口引入已完成注册的模型
const { User } = require("../models");

module.exports.signup = async (req, res) => {
  try {
    const user = await User.create({
      nom: "Jp",
      prenom: "remy",
      email: "remy@gmail.fr",
      password: "motdepasse",
    });
    // 删除测试用的主动抛错逻辑,正常返回创建结果
    res.status(201).json({ user });
  } catch (erreur) {
    console.log(erreur);
    res.status(400).json({ erreur: erreur.message });
  }
};

验证方式

修改完成后重启Node服务,控制台先打印Connection has been established successfully!数据库连接成功日志,再请求/signup接口即可正常创建用户,不会再抛出上述两个报错。

内容的提问来源于stack exchange,提问作者Elodie Jean

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:31:13