Meteor Methods не обновляет базу данных с помощью Autoform

При использовании автоформы кажется, что данные передаются из автоформы, поскольку метод Meteor на моем сервере действительно получает данные, но затем обновление базы данных внутри моего метода не обновляет мою базу данных... что мне не хватает?

Код автоформы...

{{> 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; }
});

Ниже показано, что я получаю из журнала консоли в моем методе from my meteor. Итак, я получаю изменения (в этом случае измените tenantID и false на доступные), но они не обновляются в базе данных. Я где-то упустил небольшую деталь, но не вижу ее в данный момент.

введите здесь описание изображения


person Emmanuel Henri    schedule 02.12.2017    source источник


Ответы (1)


Переменная 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 }}); 
},
person Michel Floyd    schedule 02.12.2017