egg中egg-sequelize和egg-mongoose不能同时使用

今天在项目中加入 egg-mongoose 插件,配置好 config 文件和 plugin.ts 信息后,运行代码,在加载 mongoose 插件的时候报错了,错误信息:

1
nodejs.TypeError: Cannot assign to read only property 'model' of object '#<Application>'

回看下代码发现原有的 egg-sequelize 已经挂载 model 到 app 上面

去掉其中一个插件都可以正常运行,看来 egg-sequelize 和 egg-mongoose 插件冲突了,excuse me?

错误原因

浏览 egg-sequelize 源码发现已经定义好 model 不能被重写

1
2
3
4
5
Object.defineProperty(model, delegate[len - 1], {
value: sequelize,
writable: false,
configurable: true,
});

egg-mongoose 挂载 model 到 app 上时就会报Cannot assign to read only property错误了。

解决方案

  1. 给官方提 issue:把问题和解决方案描述一下;
  2. 降级方案:去掉 MongoDB 的 model 层使用其他插件如 egg-mongo-native 或者自己封装一个;
  3. model 层使用一种数据库,将使用 MongoDB 和 MySQL 的业务拆分为两个服务;