【问题标题】:How to alter object server-side before save in Meteor如何在 Meteor 中保存之前更改对象服务器端
【发布时间】:2012-10-30 16:25:09
【问题描述】:

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

【问题讨论】:

  • 我知道您可以调用方法服务器端来执行更新和插入,但这会产生负面影响,即从我的理解中删除延迟补偿。

标签: meteor


【解决方案1】:

如果你愿意使用我写的一些代码 (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();
    });
}

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 你有如何实现上述存根的例子吗?我正在查看 StackOverflow 上的一些示例,例如 this one,但对于如何实现这一点,我仍然有些困惑。
    猜你喜欢
    • 2014-05-30
    • 2023-02-25
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2012-06-20
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多