如何在Meteor中保存之前更改对象服务器端

时间:2012-10-30 16:25:09

标签: meteor

我正在尝试在更新集合后运行某些插入语句。例如,如果用户将嵌入文档位置添加到其用户文档中,我还希望将该嵌入文档插入到单独的位置集合中。有没有办法在服务器端执行此操作,以确保操作运行?

2 个答案:

答案 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