如何使用getMeteorData()在服务器和客户端上处理相同的查询?

如何使用getMeteorData()在服务器和客户端上处理相同的查询?,meteor,reactjs,meteor-react,Meteor,Reactjs,Meteor React,我最近开始使用Meteor(与React结合使用),但有些东西我想不通 假设有一个视图,用户可以看到他的“东西”,但是管理员帐户可以看到所有的“东西” 在客户端上,我有以下代码: getMeteorData(){ 让handle=Meteor.subscribe('myData'); 返回{ stuffReady:handle.ready(), stuff:handle.ready()?stuff.find({},{sort:{'createdAt':-1}})。fetch():未定义 }; }

我最近开始使用Meteor(与React结合使用),但有些东西我想不通

假设有一个视图,用户可以看到他的“东西”,但是管理员帐户可以看到所有的“东西”

在客户端上,我有以下代码:

getMeteorData(){
让handle=Meteor.subscribe('myData');
返回{
stuffReady:handle.ready(),
stuff:handle.ready()?stuff.find({},{sort:{'createdAt':-1}})。fetch():未定义
};
},
在服务器上,我有我的发布方法:

Meteor.publish('myData',函数(){ if(this.userId){ //如果管理员显示全部,否则显示用户内容 if(Roles.userIsInRole(this.userId,['admin'],'default')){ 返回Stuff.find({},{sort:{'createdAt':-1}); } 否则{ 返回Stuff.find({'creator.\u id':this.userId},{sort:{'createdAt':-1}}); } } }); 这是工作的管理员罚款。不过,在列表被过滤之前,用户可以在1秒内看到所有内容,并且他只能看到自己的内容。 我认为这是预期的行为,因为我在getMeteorData()的返回方法中查询所有数据

但我的问题是:如何立即为用户返回正确的数据?
出于明显的原因,我不想在客户端代码中执行“管理员检查”。

如果我理解正确,则在服务器端定义了Meteor.publish下的管理员检查,因此这没关系。除非您执行类似于从服务器控制台将用户权限从管理员更改为普通用户的操作,否则不应该发生这种情况。你能详细说明一下测试是如何进行的,订阅是在什么样的环境下完成的吗?当我在这个视图上加载应用程序时,看起来还可以。当我转到有其他订阅加载“stuff”的其他视图并返回到此视图时,出现了所描述的问题。因此,可能是来自其他发布的数据尚未完全删除。即使在
unsub
完全生效之前,句柄也可以准备就绪。如果我理解正确,则在服务器端定义了
Meteor.publish
下的管理员检查,因此这是正常的。除非您从服务器控制台将用户权限从管理员更改为普通用户,否则不应该发生这种情况。你能详细说明一下测试是如何进行的,订阅是在什么样的环境下完成的吗?当我在这个视图上加载应用程序时,看起来还可以。当我转到有其他订阅加载“stuff”的其他视图并返回到此视图时,出现了所描述的问题。因此,可能是来自其他发布的数据尚未完全删除。即使在
不明嫌犯
完全生效之前,手柄也可以准备就绪。