美文网首页
egg集成mysql和MongoDB存在的一些问题

egg集成mysql和MongoDB存在的一些问题

作者: 阿拉斌 | 来源:发表于2019-07-29 16:18 被阅读0次

    假设你已经按照官网,完成了所有的配置那么你也可能会遇到跟我一样的问题

    mongoose is undefined

    问题:

    在plugin中配置mysql后,会出现mongoose.Schema中的mongoose is undefined,这个问题,是因为,在引入sequelize后,它会跟mongoose争取model文件夹的权限(我是这么理解的,然后mongoose打不赢,就成了undefined了)

    解决方案:

    在我们的config配置文件中,对配置进行修改,添加baseDirdelegate来指定对应的model目录

      config.sequelize = {
        dialect: 'mysql',
        host: '127.0.0.1',
        port: 3306,
        database: 'test',
        username: 'test',
        password: '123456',
        delegate: 'modelmysql',
        baseDir: 'modelmysql',
        define: {
          timestamps: false
        }
      };
    

    查询mysql的时候,表会带上一个复数的s

    问题:当我进行查询全部的是,比如,我在model中写的表是user,然后我进行查询,实际查询的sql会变成select * from users,这样的话,就会报错,找不到users表

    解决方案:在我们的model中需要进行一个配置:freezeTableName: true,也就是Model 对应的表名将与model名相同,当然,这个也可以在全局进行配置

    查询mysql的时候,会带有其他的字段

    问题:nodejs.SequelizeDatabaseError: Unknown column 'created_at' in 'field list',在配置好model的对应后,又出现了一个多余字段的错误,实际的sql是:

    SELECT `uid`, `username`, `spellname`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `sys_user` AS `sys_user`;
    

    解决方案:这里我们需要在config中配置不带时间戳也就是加上这么一个

      config.sequelize = {
        dialect: 'mysql',
        host: '127.0.0.1',
        port: 3306,
        define: {
          timestamps: false
        }
      };
    

    到这就基本完成了,可以愉快的进行数据的查询了。但是我觉得,node中的model还需要配置字段的长度,我也是醉了,在使用spring boot进行服务端开发的时候,就不需要这个操作,而且,用idea进行服务端开发,会有各种数据库的字段提示,node我觉得,还是进行基于MongoDB的数据库进行开发吧。。。

    相关文章

      网友评论

          本文标题:egg集成mysql和MongoDB存在的一些问题

          本文链接:https://www.haomeiwen.com/subject/iyibrctx.html