使用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更改为可用),但它不会在数据库中更新。我在某个地方遗漏了一些细节,但此时却看不到它。
答案 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 }});
},