如何保存MongoDB中保存的客户日期为日期?

时间:2015-04-08 04:30:53

标签: angularjs node.js date node-mongodb-native

我正在将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

1 个答案:

答案 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) }