时区问题

sequelize 默认情况下,保存日期时会转换成 +00:00时区。

官方文档:

比如,
提交数据:
time=2017-07-17 16:52:12

数据库中会保存成
2017-07-17 08:52:12 // 晚了8个小时

解决方式

初始化Sequelize时,配置时区
timezone: ‘+08:00’

如:

  1. const sequelize = new Sequelize(config.database, config.username, config.password, {
  2. host: config.host,
  3. port: config.port,
  4. dialect: 'mysql',
  5. pool: {
  6. max: 5,
  7. min: 0,
  8. idle: 10000
  9. },
  10. timezone: '+08:00' // 设置成东八区
  11. });

但是这样设置仍然不够,存储的是东八区,查询出来的,依然是零时区

终极方案:
不让Sequence帮我们自动生成日期,
在创建文件,更新文档时,手动传入日期。

修改表结构

当数据表结构发生变动后,要同时修改代码中定义的Model,也要修改数据库中的表。

两种方案:
1.修改Model,然后用sequelize.sync方法,强力删除表,再重建。缺点:会删除原来的数据。
2.修改Model,再通过navicat工具修改表结构,代码中不设置sequelize.sync。

肯定选择方案2。
不要通过sequelize去修改。

sequelize 查询字段 驼峰成了下划线

经过sql查询时,驼峰写法会自动转成 下划线 写法,

比如定义的model {
userName: ,
createAt
}

查询时,会变成
select user_name, created_at, from

查询的也是数据库中的 user_name, created_at字段。

所以:

并不是将model定义和数据库中的一致就可以了,比如
model是 {userName},数据库中的字段也是userName。
这样查询不出来的。

因为其实执行的sql语句是:
selecte user_name

即要查询的是数据库中的user_name字段。

但是可以通过filed属性,来定义要查的字段:
比如

  1. {
  2. userName: {
  3. filed: userName
  4. }
  5. }

这样,查询的时候,就是查 select userName了