2017-08-07 74 views
1

我喜欢在我的Meteor App上使用服务器渲染包,使用React和React-Router v4。但是,事件的onPageLoad返回一个错误:流星服务器渲染路线和Meteor.userId

Error running template: TypeError: Meteor.subscribe is not a function 

这是对createContainer功能:

export default createContainer(() => { 
    const postsHandle = Meteor.subscribe('post'); 
    const loading = !postsHandle.ready(); 
    const postsList = Post.find({ 'draft': false }).fetch(); 
    const listExists = !loading && !!postsList; 
    return { 
     loading, 
     listExists, 
     posts: listExists ? postsList : [], 
    }; 
    }, PostList); 

我不明白我怎么能得到Meteor.subscribe上的空如果我在服务器上。

任何人有关于我的问题的想法?

谢谢社区!

+0

服务器上没有订阅,只发布。您可以直接在服务器上访问集合,并保证一切都在那里。 –

回答

0

我面临同样的错误,这是因为正如评论中所提到的,服务器上没有'Meteor.subscribe',所以当代码通过接收器对象传递到服务器上时,会引发错误。 即使您的客户端代码仅在客户端上运行,您也应该将您的订阅包装在if(Meteor.isClient)中。

也可能出现其他问题,说假设,如果你想阅读screen.width等类型的属性,你就必须把它包起来就像上面

所以,你的代码变得

export default createContainer(() => { 
    var loading,listExists = false 
    var postsList= [] 
    if(Meteor.isClient){ 
     const postsHandle = Meteor.subscribe('post'); 
     loading = !postsHandle.ready(); 
     postsList = Post.find({ 'draft': false }).fetch(); 
     listExists = !loading && !!postsList; 
     } 
     return { 
     loading, 
     listExists, 
     posts: listExists ? postsList : [], 
     }; 
    }, PostList); 

这应该工作正常,只是照顾的变量和功能范围

+0

这并没有真正回答这个问题。如果您有不同的问题,可以通过单击[提问](https://stackoverflow.com/questions/ask)来提问。您可以[添加赏金](https://stackoverflow.com/help/privileges/set-bounties)在您拥有足够的[声誉](https://stackoverflow.com/help/)后吸引更多关注此问题什么声誉)。 - [来自评论](/ review/low-quality-posts/17204913) –