我正在尝试在更新集合后运行某些插入语句。例如,如果用户将嵌入文档位置添加到其用户文档中,我还希望将该嵌入文档插入到单独的位置集合中。有没有办法在服务器端执行此操作,以确保操作运行?
答案 0 :(得分:3)
如果你愿意使用我编写的一些代码(https://gist.github.com/matb33/5258260),你可以像这样挂钩:
编辑:代码现在是https://github.com/matb33/meteor-collection-hooks
项目的一部分var test = new Meteor.Collection("test");
if (Meteor.isServer) {
test.before("insert", function (userId, doc) {
doc.created = doc.created || Date.now();
});
test.before("update", function (userId, selector, modifier, options) {
if (!modifier.$set) modifier.$set = {};
modifier.$set.modified = Date.now();
});
test.after("update", function (userId, selector, modifier, options, previous) {
doSomething();
});
}
答案 1 :(得分:-1)
您需要在方法中执行此操作..您可以通过实现客户端方法存根来保持延迟补偿:
在客户端上调用方法定义与之关联的存根函数 同名的服务器方法。您不必为其定义存根 你的方法,如果你不想。在这种情况下,方法调用就是 比如在其他系统中进行远程过程调用,你必须等待 来自服务器的结果。
如果你确实定义了一个存根,当客户端调用一个服务器方法时,它会 也可以并行运行它的存根。在客户端上,a的返回值 存根被忽略。存根是因为它们的副作用:它们是 旨在模拟服务器方法的结果, 但没有等待往返延误。如果存根抛出一个 例外,它将被记录到控制台。
在此处查看我的Meteor存根示例:https://stackoverflow.com/a/13145432/1029644