如何在meteor.call方法中发送ISODate

时间:2018-04-23 10:43:42

标签: mongodb meteor

我在流星的客户端创建了一个对象数组,每个对象都在其中修改了日期,如下所述:

客户端:

student;

此处student是包含name, id, roll_no

的对象数组
var array = [];
student.forEach(function(singleStud, index){
   var single_obj ={
   "name":singleStud.name,
   "student_id":singleStud.id,
   "roll_no":singleStud.roll_no,
   "college_name":"ABC college",
   "college_id":"xyz Id",
   "created_date": new Date()
  }
array.push(single_obj);

},this)

Meteor.call('saveDetails', array, function (error, result) {
   console.log("data Saved Successfully");
});

服务器端:

我使用插件mikowals:batch-insert在mongo中插入一个等同于insertMany的数组。

Meteor.methods({
"saveDetails": function (array) {
        try {
           studentDetails.batchInsert(array);
            return true;
        } catch (err) {
            return err;
        }
    }
});

当我保存时,created_date将其保存为字符串("2018-04-23T10:26:26.766Z"),但我希望将其保存为日期数据类型(ISODate("2018-04-23T10:26:26.766Z"))。

如何在meteor.call ???

中从客户端实现

1 个答案:

答案 0 :(得分:1)

  1. 这实际上是mikowals:batch-insert中的错误。 mikowals-batch-insert以递归方式尝试将对象转换为与MongoDB友好的JSON格式。作为此过程的一部分,它使用underscore clone来生成基本类型的shallow copies。虽然Date是原始的,但它不能用_.clone克隆,因此它会将日期变为字符串(eww)。您应该使用mikowals:batch-insert打开问题。

  2. 无论如何,您不应该在客户端上定义此数据。客户端可能会恶意注入错误信息(这可能会破坏您的应用程序的逻辑)。相反,您应该映射输入并将日期注入传入对象。