最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • egg-monoose TypeError: Cannot read property 'Schema' of undefined

    正文概述 掘金(Guixian)   2021-01-03   696

    问题

    这周有个需求是使用 egg.js 接入 MongoDB 数据库,于是先按照官方推荐的方式使用 egg-mongoose,但是在按照文档进行操作写 demo 时出现了非常诡异的错误TypeError: Cannot read property 'Schema' of undefinedapp.mongoose app 下的 mongoose 没有被正常挂载上。

    // config/plugin.js
    module.exports = {
      ... 省略其他不相关配置
      mongoose: {
        enable: true,
        package: 'egg-mongoose',
      },
    };
    
    // config/config.default.js
    module.exports = appInfo => {
      /**
       * built-in config
       * @type {Egg.EggAppConfig}
       **/
      const config = exports = {};
      ... 省略其他不相关配置
      config.mongoose = {
        client: {
          url: 'mongodb://xxxx:30000',
          options: {
            mongos: true,
            dbName: 'xxx',
            user: 'xxx',
            pass: 'xxx',
          },
        },
      };
      return {
        ...config,
      };
    }
    
    // {app_root}/app/model/user.js
    module.exports = app => {
      const mongoose = app.mongoose;
      const Schema = mongoose.Schema;
    
      const UserSchema = new Schema({
        userName: { type: String  },
        password: { type: String  },
      });
    
      return mongoose.model('User', UserSchema);
    }
    

    排查思路

    首先确认有没有拼写错误,没有的话直接用最小化方式使用 egg-mongoose 是否可以复现来确认是不是文档出现了问题。测试后发现正常。接下来就是排查本地代码,发现是由于 egg-sequelize 导致的,而部分业务接口之前配置了使用 MySQL 数据库。。 egg-sequelizeegg-mongoose 默认都是加载 app/model 下的文件,具体逻辑后续详说。

    解决方法

    看看是否可以修改插件的加载目录。 egg-mongoose 是不能配置的,源码里面写死了指定的 model 路径, egg-sequelize 是可以的。

    config.sequelize = {
        baseDir: 'my_model', // load all models to `app[delegate]` and `ctx[delegate]`, default to `model`
        delegate: 'myModel', // load all models to `app[delegate]` and `ctx[delegate]`, default to `model`
        dialect: 'mysql',
        host: process.env.MYSQL_HOST,
        port: 3306,
        database: process.env.MYSQL_DATABASE
        username: process.env.MYSQL_USER 
        password: process.env.MYSQL_PASSWORD
    };
    

    修改之前就没问题了,delegate 表示将 orm 挂载的位置,之前默认是 model,修改完之后不要忘记业务代码中的已有代码(如this.ctx.model.xxx => this.ctx.myModel.xxx)。


    起源地下载网 » egg-monoose TypeError: Cannot read property 'Schema' of undefined

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元