Meteor Methods不使用Autoform

时间:2017-12-02 20:53:19

标签: meteor meteor-autoform

使用autoform,似乎数据是从autoform传递的,因为我服务器上的Meteor方法确实获取了数据,但是然后在我的方法中进行数据库更新不会更新我的数据库...我错过了什么?

Autoform代码......

{{> quickForm collection="Rooms" type="method-update" 
      doc=this autosave=true id=makeUniqueID 
meteormethod="updateRoom"}}

流星法:

updateRoom: function (room) {
  console.log(room);
  Rooms.update({_id: room._id}, { $set: {
    checkIn: room.checkIn,
    checkOut: room.checkOut,
    tenantID: room.tenantID,
    available: room.available,
    needCleaning: room.needCleaning,
}});
},

我的允许/拒绝规则:

Rooms.allow({
 insert() { return false; },
 update() { return false; },
 remove() { return false; }
});

Rooms.deny({
 insert() { return true; },
 update() { return true; },
 remove() { return true; }
});

以下是我从meteor方法中获取控制台日志的内容。所以我确实得到了更改(在这种情况下将tenantID和false更改为可用),但它不会在数据库中更新。我在某个地方遗漏了一些细节,但此时却看不到它。

enter image description here

1 个答案:

答案 0 :(得分:2)

您传递给该方法的room变量将所有内容嵌套在modifier$set:键下。

你可以这样做:

updateRoom: function (room) {
  Rooms.update({_id: room._id}, room.modifier);
},

但这确实是不安全的,因为你将整个修饰符传递给方法,黑客可以传入他们想要的任何内容。

更好:

updateRoom(room) {
  check(room,Object);
  check(room._id,String);
  {checkIn, checkOut, tenantId, available, needCleaning } = room.modifier.$set;
  Rooms.update(room._id, { $set: {checkIn, checkOut, tenantId, available, needCleaning }}); 
},