4

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

4

2 回答 2

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();
    });
}
于 2013-03-27T23:07:59.253 回答
-1

您需要在方法中执行此操作..您可以通过实现客户端方法存根来保持延迟补偿:

在客户端调用方法定义了与同名服务器方法关联的存根函数。如果您不想,您不必为您的方法定义存根。在这种情况下,方法调用就像其他系统中的远程过程调用一样,您必须等待来自服务器的结果。

如果你确实定义了一个存根,当客户端调用一个服务器方法时,它也会并行运行它的存根。在客户端,存根的返回值被忽略。存根的运行是因为它们的副作用:它们旨在模拟服务器方法将执行的操作的结果,但无需等待往返延迟。如果存根抛出异常,它将被记录到控制台。

在此处查看我的 Meteor 存根示例:https ://stackoverflow.com/a/13145432/1029644

于 2012-10-30T17:31:55.907 回答