我有Messages集合,我删除了不安全的包。我想在集合中插入新文档。是否可以在插入之前更新当前文档?
这个例子当然不起作用:
Messages.allow({
insert: function(userID, doc) {
if (userID == doc.userID) {
// something like this
doc = {
email: Meteor.user().emails[0].address,
message: doc.message,
time: Date.now()
}
return true;
} else {
return false;
}
}
});
正如您所看到的,我只是从客户端获得doc.message
。但我想将时间和用户的电子邮件保存到文档中。我怎么能在流星中这样做?方法是唯一的选择吗?
答案 0 :(得分:2)
最好使用collection-hooks包:https://github.com/matb33/meteor-collection-hooks
它允许您在另一个集合的另一个插入之前或之后插入文档。
e.g
Messages.before.insert(function (userId, doc) {
doc.createdAt = Date.now();
doc.xxx = false;
});
答案 1 :(得分:1)
您可以执行此操作但需要使用deny
,因为无法保证给定的allow
无法运行。试一试:
Posts.deny({insert: function(userId, doc) {
if (userId === doc.userID) {
_.defaults(doc, {
email: Meteor.user().emails[0].address,
time: Date.now()
});
}
return false;
}});
请查看this以获取完整说明。