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

调用Sequelize内置函数报错:User.create不是函数求助

Sequelize调用User.create()报错TypeError: User.create is not a function的解决方法

问题场景

通过npx sequelize-cli init初始化Sequelize项目,User表迁移文件、模型文件及自动生成的models/index.js均配置完成,数据库迁移成功。server.js中数据库连接验证通过,但调用User.create()时触发TypeError: User.create is not a function错误,无法使用Sequelize内置方法。

错误原因

  1. 模型引入方式错误:直接require("./models/User")得到的是模型的工厂函数,而非已和Sequelize实例绑定的模型对象。models/index.js已经完成了模型与Sequelize实例的关联,必须从其导出的db对象中获取模型。
  2. 变量未定义:server.js中使用的sequelize变量未声明,正确引用应为db.sequelize。
  3. 语法不完整:server.js末尾缺少闭合的});,导致代码执行异常。
  4. 迁移表名不一致:迁移文件down方法中删除的表名是Users,但up方法创建的表名是User,回滚时会找不到对应表。

解决方案

1. 修正server.js代码

调整模型引入方式,修复未定义变量并补全语法:

const express = require("express");
const app = express();
const cors = require("cors");
const PORT = process.env.PORT || 3500; // 增加默认端口,避免环境变量未设置时出错
const db = require("./models");
// 从db对象中获取已初始化的User模型
const User = db.User;

app.use(express.json());
app.use(cors());

db.sequelize.sync({force: true}).then(async () => {
  app.listen(PORT, () => {
    console.log(`Listening on port ${PORT}`);
  });
  const newUser = {
    username: "abc",
    password: "123123",
    successfully_verified: false,
  };
  try {
    await db.sequelize.authenticate();
    console.log("Connection has been established successfully.");
    const user = await User.create(newUser);
    console.log(user);
  } catch (error) {
    console.error("Error creating user:", error);
  }
}); // 补全闭合括号

2. 修正迁移文件的down方法

确保删除的表名与创建的表名一致:

async down(queryInterface, Sequelize) {
  await queryInterface.dropTable('User'); // 改为与up方法一致的表名'User'
}

3. 验证执行

重新启动server.js,此时User.create()应能正常执行,成功创建用户记录并打印相关信息。

内容的提问来源于stack exchange,提问作者Sajeel Zafar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:58:09