【问题标题】:Meteor is not transforming my documents before publicationMeteor 不会在发布前转换我的文档
【发布时间】:2013-05-14 01:58:03
【问题描述】:

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

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

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

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

  1. 只有部分文档触发了转换功能,不是全部(我可以通过控制台日志看到这一点)
  2. 在客户端,没有一个文档被标记为myProp

我没有尝试将transform 放在客户端和服务器上,因为在我的现实应用程序中,我无法在客户端上进行必要的计算。

【问题讨论】:

    标签: meteor


    【解决方案1】:

    集合上的转换函数是为了方便,而不是安全 - 请注意,当您在游标上调用 observeChanges 时,信息不会通过转换函数(它通过调用observe时进行转换)。发布游标的默认方式是调用observeChanges

    如果您想删除正在发布的光标的字段,请在您的集合中使用fields 选项到find。如果你想做一些更复杂的事情,你可以显式地做任何你需要的计算,如果你的发布函数调用addedchangedremoved本身,而不是返回一个游标。详情请查看Meteor.publish 的文档。

    【讨论】:

    • 有没有办法通过发布将附加/虚拟字段从服务器发送到客户端?
    猜你喜欢
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2015-08-15
    • 2021-01-15
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多