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

Electron渲染进程执行Sequelize命令报错:moment.isMoment is not a function

Electron + Sequelize 渲染进程数据库操作报错问题

错误信息

data-types.js:527 Uncaught (in promise) TypeError: moment.isMoment is not a function
at DATE3._stringify (data-types.js:527:17)
at DATE3.stringify (data-types.js:27:19)
at DATE3.bindParam (data-types.js:38:35)
at SQLiteQueryGenerator.format (query-generator.js:1091:29)
at SQLiteQueryGenerator.insertQuery (query-generator.js:186:30)
at SQLiteQueryInterface.insert (query-interface.js:784:37)
at User.save (model.js:4226:73)

项目代码

models/user.ts

export class User extends Model<
  InferAttributes<User>,
  InferCreationAttributes<User>
> {
  declare id: CreationOptional<number>;
  declare displayName: string;
  declare tagLine: string;
  declare server: string;
  declare createdAt: CreationOptional<Date>;
  declare updatedAt: CreationOptional<Date>;
}

models/index.ts

init();

async function init() {
  // 渲染进程中通过ipcMain获取应用路径,主进程直接获取
  let path =
    (await electron.ipcRenderer?.invoke("read-user-data")) ||
    electron.app.getPath("userData");

  const sequelize = new Sequelize({
    dialect: "sqlite",
    storage: path + "/databases/database.sqlite",
  });


  User.init(
    {
      // 定义模型属性
      id: {
        type: DataTypes.BIGINT.UNSIGNED,
        autoIncrement: true,
        allowNull: false,
        primaryKey: true,
      },
      displayName: {
        type: DataTypes.STRING,
        allowNull: false,
        unique: "users_display_name_tag_line_server_index",
      },
      tagLine: {
        type: DataTypes.STRING,
        allowNull: false,
        unique: "users_display_name_tag_line_server_index",
      },
      server: {
        type: DataTypes.STRING,
        allowNull: false,
        unique: "users_display_name_tag_line_server_index",
      },
      createdAt: DataTypes.DATE,
      updatedAt: DataTypes.DATE,
    },
    {
      sequelize,
      modelName: "User",
      underscored: true,
    }
  );

  sequelize
    .sync({ force: true })
    .then((response) => {
      // 此处执行正常
      let user = User.create({
        displayName: "test2",
        tagLine: "test2",
        server: "test2",
      });
    })
    .catch((e: Error) => {
      console.error(e);
    });
}

export { User };

Renderer worker.ts

import { User } from "../../models";

// 延迟执行是临时方案,等待Sequelize初始化完成
setTimeout(() => {
  // 此处报错:moment.isMoment is not a function
  let user = User.create({
    displayName: "test",
    tagLine: "test",
    server: "test",
  });
}, 5000);

Main index.ts

workerWin = new BrowserWindow({
  //show: false,
  webPreferences: {
    preload: join(__dirname, "../preload/index.cjs"),
    nodeIntegration: true,
    contextIsolation: false,
    webSecurity: false,
    backgroundThrottling: false,
  },
});
ipcMain.handle("read-user-data", (event) => {
  return app.getPath("userData");
});
setTimeout(() => {
  // 此处执行正常
  let user = User.create({
    displayName: "test",
    tagLine: "test",
    server: "test",
  });
}, 6000);

已尝试无效方案

  • 删除node_modules后重新安装依赖
  • 试用Sequelize v7(Alpha版,官方称不再依赖moment)
  • 手动安装moment模块

需求

希望在渲染进程(Worker窗口)中解决该问题,不希望将数据库操作转移到主进程,因为该Worker窗口有大量数据库交互需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 01:06:41