今天想在eggjs项目中加入egg-mongoose插件,在config文件和plugin.js中都配置了信息,可是在定义mongo model时,app.mongoose始终是undefined。 我就去掉原有的egg-sequelize插件试试,结果mongoose插件生效了。我反复试验,发现egg-sequelize和egg-mongoose不能同时使用,可是eggjs毕竟是阿里的框架,应该不会出现这个问题。 请问大家知道这个问题怎么解决吗?
插件应该是没有冲突的; 如果插件不生效的话,在启动过程中就会抛出异常信息; 具体还是贴上代码来看看吧,我猜测可能是 model 定义出问题了~
@x-cold 在model下分别定义sequelize和mongoose model: 1.sequelize 正常定义 module.exports = app => { const { STRING, INTEGER, DATE, TEXT } = app.Sequelize; const Article = app.model.define(‘article’, { id: { primaryKey: true, type: STRING(40) },//主键 title: STRING(40),//标题 homeImage:STRING(200),//标题图片 readNum: { type: INTEGER(11), defaultValue: 0 },//阅读量 commentNum: { type: INTEGER(11), defaultValue: 0 },//评论量 html: TEXT,//内容 },{ underscored:false, paranoid: true, }); return Article; }; 2.mongoose app.mongoose是undefined module.exports = app => { const mongoose = app.mongoose; const Schema = mongoose.Schema;
const TestSchema = new Schema({ userName: { type: String }, password: { type: String }, });
return mongoose.model(‘Test’, TestSchema); }
config.default.js中添加配置: exports.mongoose = { client: { url: ‘mongodb://localhost:27017/log’, options: {} } }; exports.sequelize = { dialect: ‘mysql’, database: ‘xx’, host: ‘localhost’, port: ‘3306’, username: ‘xx’, password: ‘xx’ }; config.plugin.js中配置: exports.sequelize = { enable: true, package: ‘egg-sequelize’ } exports.mongoose = { enable: true, package: ‘egg-mongoose’ }
大概知道问题了,应该是在 egg-sequelize 初始化过程中触发了 loadModel,这个时候 egg-mongoose 插件还没有加载好,所以就出问题了; 1、给官方提 issue:把问题和解决方案描述一下; 2、建议 model 层还是统一使用一种数据库就好了; 3、目前的降级方案的话:去掉 mongo 或者 mysql 的 model 层,在 service 或其他层面去处理,应该是没有问题的;
@x-cold 好的,谢谢,我提下issue,用你的方案兼容下
@jiangliqin 我也碰到这个问题了,官方还没解决吗,请问你是怎么处理的