Meteor在发布之前没有改变我的文档

时间:2013-05-12 21:26:38

标签: meteor

出于安全原因,我想在将文档发布到客户端之前添加和删除文档属性,具体取决于某些动态计算。我关注Meteor documentation和此other SO question

例如简单,假设我尝试将以下静态属性添加到每个文档(仅限SERVER SIDE):

var Docs = new Meteor.Collection('docs', {
    transform: function (f) {
        console.log('Tagging doc: ' + f._id);
        f.myProp = 1;
        return f;
    }
});

由于一些奇怪的原因,这不起作用:

  1. 只有一些文档会触发转换功能,而不是全部(我可以通过控制台日志记录看到这一点)
  2. 在客户端,没有任何文档标有myProp
  3. 我没有尝试将transform放在客户端和服务器上,因为在我的真实应用程序中,我无法在客户端上进行必要的计算。

1 个答案:

答案 0 :(得分:2)

集合上的转换函数是为了方便而不是安全性 - 请注意,当您在游标上调用observeChanges时,信息不会通过转换函数传递( 传递当你拨打observe时通过转换。发布游标的默认方式是通过调用observeChanges来实现。

如果要删除要发布的光标的字段,请使用集合中的fields选项find。如果您想要做一些更复杂的事情,如果您的发布函数调用addedchangedremoved本身而不是返回游标,则可以明确地执行您需要的任何计算。有关详细信息,请查看Meteor.publish的文档。