我有一个具有以下发布功能的流星应用程序(使用coffeescript):
Meteor.publish "apps", ->
apps = Apps.find {},
fields :
name : 1
description : 1
icon : 1
fileIds = []
apps.forEach (doc, idx, cursor) ->
if (doc.icon)
fileIds.push(doc.icon)
console.log(fileIds)
files = Files.find {_id : { $in : fileIds}}
[apps, files]
注意我有一个console.log来检查发布函数何时运行。 我将一个元素插入到收集应用程序后。我没有看到重新运行发布功能。对我来说问题是,Apps集合包含一个字段图标,它是Files集合中项目的_id(使用CollectionFS)。当我将项目插入应用程序时,上传文件并将项目插入到文件集合中。但是,由于不重新运行发布功能,因此新创建的File项不会发布到客户端,因此客户端无法查看该文件。
这是什么问题?
感谢。
答案 0 :(得分:0)
当您在发布方法中执行的查询可用的文档发生更改时,不会重新运行发布方法。
您将两个变量返回到发布方法apps
& files
。这两个现在是游标。
当光标添加了新文档时,它会将新文档中继到客户端。请注意,这意味着查询保持不变,当第一次运行该方法时,{_id : { $in : fileIds}
将保留原始fileIds
。
重新运行发布方法时有一个例外:当用户登录或注销时。
查看代码,您希望更改一个查询,具体取决于其他更改的时间。为此,您可能需要使用另一个范例来发布,例如使用publish-with-relations包:https://atmospherejs.com/cottz/publish-with-relations。