Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Collection.find()在我的Meteor客户端上不起作用?_Javascript_Mongodb_Reactjs_Meteor - Fatal编程技术网

Javascript 为什么Collection.find()在我的Meteor客户端上不起作用?

Javascript 为什么Collection.find()在我的Meteor客户端上不起作用?,javascript,mongodb,reactjs,meteor,Javascript,Mongodb,Reactjs,Meteor,我确保正确创建我的集合,发布数据,订阅正确的发布,并检查数据是否确实出现在Mongo Shell中。我甚至对正在发布的数据进行了console.log()检查,以确保发布正常工作。但是,以下代码行无法返回任何内容: const maybemete=Meets.find({meetId:maybeId}).fetch() 这可以在链接的回购协议的/client/imports/routes/routes.js的第39行中找到 有一次,我甚至尝试创建一个新的Meteor方法'meets.query'

我确保正确创建我的集合,发布数据,订阅正确的发布,并检查数据是否确实出现在Mongo Shell中。我甚至对正在发布的数据进行了console.log()检查,以确保发布正常工作。但是,以下代码行无法返回任何内容:

const maybemete=Meets.find({meetId:maybeId}).fetch()

这可以在链接的回购协议的
/client/imports/routes/routes.js
的第39行中找到

有一次,我甚至尝试创建一个新的Meteor方法
'meets.query'
,它只发布我需要的所有数据,(不安全地)避免了发布和订阅的需要(现在在
/client/imports/api/meets.js
的第59行注释掉了)。这也不起作用。一般来说,客户端似乎无法从服务器接收任何数据,但从客户端到服务器似乎是可行的(我可以将内容插入我的集合)

以下是问题的根源(部分
routes.js
):

如果您需要了解更多信息,请参阅回购协议以了解全部代码:


对于混乱的代码,我向您道歉-这是一个新项目。

这里的问题是订阅操作是异步的,因为它必须从服务器获取数据

解决方案是将路由器渲染的组件包装在带有跟踪器的
中,以便在数据可用时重新运行,并开始渲染到DOM

有关如何执行此操作的更多信息,请参见文档:

在我创建的
组件中,我有一个
Tracker.autorun()
,其中有一个错误,这导致其他所有东西都崩溃了。调用Meteor.subscribe(allMeets)也是异步的,并且没有这样处理

我发现withTracker的
很麻烦,但我从它的文档中获得了很多灵感。因此,my
Created
组件中编辑的代码现在包括以下内容:

componentDidMount() {
    this.meetTracker = Tracker.autorun(() => {
      const subHandle = Meteor.subscribe('allMeets');
      const loading = !subHandle.ready();

      const maybeMeet = Meets.find({meetId: this.props.meetId}).fetch();
      if (!maybeMeet.length && loading) {
        this.setState({active: <Loading />});
      } else if (!loading) {
        if (maybeMeet.length) {
          this.setState({active: <During meet={maybeMeet[0]} />});
        } else {
          createHistory().push('/PageNotFound');
          window.location.reload();
        }
      }
    });
  }
  <Route path="/meet" render={() => {
    const maybeId = queryString.parse(location.search).m;
    return <Created meetId={maybeId} />
  }} />

使用Tracker,查看meteor文档

例如,在这段代码中,对于应用程序组件,withTracker与订阅保持同步,而things列表获取集合

export default withTracker(() => {
  Meteor.subscribe('allThings')
  return {
    things: Things.find({}).fetch()
  }
})(App);

检查我的meteor react样板


我使用软件包
meteor/react meteor data
。HOF
withTracker
是正确的解决方案。

我不需要访问您的代码库。请阅读。刚刚编辑,感谢社区指南的链接。
  <Route path="/meet" render={() => {
    const maybeId = queryString.parse(location.search).m;
    return <Created meetId={maybeId} />
  }} />
export default withTracker(() => {
  Meteor.subscribe('allThings')
  return {
    things: Things.find({}).fetch()
  }
})(App);