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

使用Sequelize CLI生成模型后调用create出现未定义错误求助

解决"Cannot read property 'create' of undefined"的问题

这个错误说明你导入的User是undefined,问题出在模型导入方式和模块导出的匹配上,咱们一步步来修复:

1. 修正模型导入语句

你的models/index.js导出的是一个包含所有模型的db对象(默认导出),而非单独导出User。当前的解构导入方式不匹配,需要改成以下两种方式之一:

// 方式1:先导入完整db对象,再解构出User
import db from '../../../../models';
const { User } = db;

// 方式2:明确指定导入index.js文件,直接解构
import { User } from '../../../../models/index.js';

如果你的项目配置了ES模块(比如package.json里有"type": "module"),CommonJS的module.exports会被识别为默认导出,解构时需要明确从默认导出中提取User。

2. 验证User模型是否被正确加载

确认models/index.js已经成功读取到user.js:

  • 检查user.js是否在models目录下,文件名没有拼写错误(比如别写成users.js)
  • 确认user.js里的modelName是'User',和index.js里db[model.name] = model的逻辑对应,这样db.User才能正确指向模型。

3. 补充:修复User模型的字段遗漏

我注意到你的user.js模型里,init方法只定义了name字段,但数据库里有email和password,创建用户时也传入了email。记得把这些字段补充到模型中,否则创建时会忽略这些属性,甚至可能引发验证错误:

User.init({
  name: DataTypes.STRING,
  email: DataTypes.STRING, // 补充email字段
  password: DataTypes.STRING // 补充password字段
}, {
  sequelize,
  modelName: 'User',
});

4. 额外检查:异步操作的上下文

确保你的await代码是在async函数中执行的,比如Express路由里的写法:

app.post('/users', async (req, res) => {
  try {
    const { User } = require('../../../../models'); // 用CommonJS的写法
    // 或者用ES模块的正确导入方式
    await User.create({ name: 'john doe', email: 'john@gmail.com' })
    res.json({"message": "create"})
  } catch (error) {
    res.send(error.message)
  }
})

按照上面的步骤调整后,应该就能解决User为undefined的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:29:53