我正在将Node.js和Angular.js用于Web项目。我知道如果使用新的Date()在服务器上创建日期,日期将保存为日期(例如,Robomongo中显示的2015-04-08 04:15:18.712Z
为日期类型)。但是,如果使用新的Date()在客户端上创建日期,则将其保存为字符串(例如,在Robomongo中显示为2015-04-07T04:58:12.771Z
作为字符串类型),因为它成为通过节点API的字符串。如何将其保存为Date而不是String?
更新: 这是我根据Jason Cust的输入得到的。在节点的server.js中指定reviver选项,如下所示:
app.use(bodyParser.json({ reviver: function(key, value) {
if ( typeof value === 'string' && value.length === 24) {
if (value.match(/^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\d\d\dZ$/)){
return new Date(value);
}
}
return value;
}}));
当数据从客户端发送到服务器时,这将自动将所有日期字符串转换为日期对象。
如果你想为Angular.js客户端做同样的事情,我找到了Andrew Davey的一篇好博客Automatic JSON date parsing with AngularJS
答案 0 :(得分:0)
我将假设您使用JSON将日期从Angular应用程序发送到您的Node应用程序。 JSON spec不会重建Date对象,因此在将其插入MongoDB之前,您必须先自己完成。
示例:
// simulate JSON from HTTP request
var json = JSON.stringify({date: new Date()});
console.log(json);
// outputs: '{"date":"2015-04-08T04:50:04.252Z"}'
var obj = JSON.parse(json);
console.log(obj);
// outputs: { date: '2015-04-08T04:50:04.252Z' }
// reconstitute Date object
obj.date = new Date(obj.date);
console.log(obj);
// outputs: { date: Wed Apr 08 2015 00:50:04 GMT-0400 (EDT) }