【发布时间】:2015-08-29 20:10:02
【问题描述】:
我正在使用 Hapi 在 node.js 中构建应用程序,并使用 Mongoose 在 Mongodb 中构建数据库。我有以下消息架构:
var schema = {
from : {
type : Schema.ObjectId,
ref : 'User'
},
content : {
type : String,
required : true
},
group : {
type : Schema.ObjectId,
ref : 'Group'
},
created : {
type : Number,
default : Date.now()
}
};
我希望架构中的 created 字段是时间戳,并且始终使用 UTC。为此,我的客户端始终将其当前时间戳转换为其 UTC 时间戳,然后发送到服务器。但是,我在服务器上找不到可能的方法来验证提供的时间戳是否已转换为 UTC。有什么方法可以在 Hapi/Mongoose 中进行验证?
提前致谢。
编辑:
- 将
created字段的类型更改为Number,因为我想存储timestamp而不是日期字符串。
【问题讨论】:
-
我敢说这取决于客户如何提交您的日期。很有可能(和良好的做法)它是一个“字符串”。所以你可以这样做:
"2015-06-14T06:26:30.510Z".substr(-1) == "Z"因为如果字符串是 UTC 格式,“Z”将是最后一个字符。另请注意,mongoose 中的验证挂钩会在模式进行的任何“类型”转换“之后”触发。因此,一旦您提交写入操作,任何有效的日期字符串都会被转换,无论它是否是 UTC。 -
如果我将“创建”字段的类型更改为只是一个数字,然后将其存储为从客户端发送的(作为时间戳)怎么办?很抱歉,我应该早先声明,我现在意识到将字段存储为“日期”类型将始终将其转换为日期字符串而不是“时间戳”数字,这正是我想要的。我会在几分钟内更新问题中的“创建”类型。
-
首先我建议保留“日期”类型,因为 MongoDB 可以很好地原生地处理日期,甚至还有一些技巧可以将该类型用作“时间戳”(这基本上是内部存储)所以改变它没有真正的优势和劣势。其次,如果它是作为时间戳的“数字”格式,那么无论如何它将是 UTC,因为 Unix 时间戳不记录“时区”信息。
标签: javascript node.js mongodb mongoose hapijs