我正在创建一个node.js REST api,它使用Mongoose从MongoDB读取数据,但是时间戳年份是用1970读取的
我的模特
last_updated: {
type: Date,
}
我的控制器
exports.listAllGlobalData = function(req, res) {
GlobalData.find({}).exec((err, data) => {
console.log(data)
if (err) return next(err);
res.json(data);
});
};
我在mongodb的数据:
last_updated : 1516538665
和json结果:
"last_updated": "1970-01-18T13:11:47.064Z"
所以时间似乎是正确的,但不知何故,日期不是应该是2018年。数据是只读的。
尝试将Date.now
设置为默认值:
last_updated: {
type: Date,
default: Date.now
}
来自Mongoose
文档:“Date.now()
返回当前的unix时间戳作为数字。”
所以问题毕竟是时间戳格式,以秒为单位,而Date
(mongoose使用)则以毫秒为单位。毕竟相当微不足道。
我最终使用了SchemaType.prototype.set
on attribute with function as value,它检查了时间戳长度,如果以秒为单位将其乘以1000(更短)。
您也可以在填充模型之前执行此操作,但这样就不需要每次都执行此操作,除了将相同的键设置为typeof Date
的Schema属性。它也可以用箭头功能来完成,例如:
set: v => Math.round(v)
我不知道这是否是最好的方法,也没有办法在声明属性参数Schema.Types.Date
时添加此函数
此外,我不能使用钩子来save
或update
等事件,因为我不会在这个模型上调用任何这些方法