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
相关产品推荐
相关产品推荐

