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

Sequelize使用require导入模型时无法正常创建实例问题求助

代码问题说明

1. src/models/message.js 存在两处致命错误

  • 顶部第一行导入逻辑错误:import sequelize from '.message.js' 是当前文件导入自身,会直接触发循环引用报错。你导出的是模型工厂函数,sequelize实例和DataTypes都会由index.js调用时作为参数传入,完全不需要在模型文件顶部单独导入。
  • 顶部第二行导入无效:从sequelize/types导入的是TypeScript类型定义,普通JS项目引入会直接报错,无需添加。
  • 可选修正:如果你的项目package.json中配置了"type": "module"(即使用ES模块规范),module.exports属于CommonJS语法,和ES模块的import不兼容,需要替换为ES模块导出。

修正后的src/models/message.js参考:

export default (sequelize, DataTypes) => {
    const Message = sequelize.define("message", {
        text: {
            type: DataTypes.STRING
        }
    })

    Message.associate = models => {
        Message.belongsTo(models.User)
    }

    return Message
}

2. src/models/index.js 存在模块语法混用错误

代码中同时使用了ES模块的import/export语法和CommonJS的require语法,两种规范不能混用:如果是ES模块项目,require方法不存在会直接报错;如果是CommonJS项目,import/export语法会报错。

适配ES模块规范的src/models/index.js参考:

import 'dotenv/config';
import Sequelize from 'sequelize';
import importUser from './user.js';
import importMessage from './message.js';

const sequelize = new Sequelize(
  process.env.DATABASE,
  process.env.DATABASE_USER,
  process.env.DATABASE_PASSWORD,
  {
    dialect: 'postgres',
  },
);

const models = {
  User: importUser(sequelize, Sequelize.DataTypes),
  Message: importMessage(sequelize, Sequelize.DataTypes),
}

Object.keys(models).forEach(key => {
  if ('associate' in models[key]) {
    models[key].associate(models);
  }
});

export { sequelize };
export default models;

如果你的项目使用CommonJS规范,只需要把所有import替换为require、export替换为module.exports即可,不要混写两种模块语法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:36:03