egg集成mysql和MongoDB存在的一些问题
2019-07-29 本文已影响0人
阿拉斌
假设你已经按照官网,完成了所有的配置那么你也可能会遇到跟我一样的问题
mongoose is undefined
问题:
在plugin中配置mysql后,会出现mongoose.Schema
中的mongoose is undefined
,这个问题,是因为,在引入sequelize
后,它会跟mongoose
争取model
文件夹的权限(我是这么理解的,然后mongoose
打不赢,就成了undefined了)
解决方案:
在我们的config配置文件中,对配置进行修改,添加baseDir
和delegate
来指定对应的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的数据库进行开发吧。。。