乐趣区

关于mongodb:Mongoose在Schema中使用get修饰符格式化日期时间无效的一种情况

Mongodb 数据库存储工夫的格局是 ISO 格局的,与北京工夫有 8 个小时的时区差,所以在理论应用过程中往往须要对数据库中取出的工夫进行格式化。
moment.js 是一个很好用的日期解决方面的类库,@官网
具体的应用形式如下:

const UserSchema = new mongoose.Schema({username: { type: String, required: true, unique: true},
  password: {type: String, required: true},
  email: String,
  create_time: { 
    type: Date, 
    default: Date.now, 
    get: v => moment(v).format('YYYY-MM-DD HH:mm:ss') // 这里大写的 HH 是 24 小时制,小写的 hh 是 12 小时制
  }
});

但在配合 mongoose 应用时遇到了一个坑,尽管应用办法是正确的,但前台从后盾拿到的 JSON 里的日期却还是数据库中未经格式化的原始数据,也就是说写在 schema 中的日期格式化代码如同并没有失效。

一开始始终认为是 moment 或者 Schema 哪里写的有问题,但试着在接口返回数据之前输入了一下,后果输入的日期却是格式化好了的,这就很奇怪了。
起初又搜寻了半天起因之后才得悉,是Schema 差了一个属性,这里须要这样设置

UserSchema.set('toJSON', { getters: true});

如果不这样设置的话,返回的 JSON 是不会触发 Schema 中的 get 修饰符的,这也就导致了后盾返回的后果里仍旧是格式化之前的日期。

退出移动版