gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:17:18 57 4
gpt4 key购买 nike

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

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

这可以在下面和链接库中 /client/imports/routes/routes.js 的第 39 行中找到。

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

这是问题的根源(routes.js 的一部分):

export const routes = (
<div id='app'>
<Header />
<Router history={browserHistory}>
<Switch>
<Route exact path="/" render={() => {
return <Landing />
}} />
<Route path="/before" render={() => {
return <Before />
}} />
<Route path="/meet" render={() => {
Meteor.subscribe('allMeets');

const maybeId = queryString.parse(location.search).m;

console.log(typeof maybeId);
console.log(maybeId);

const maybeMeet = Meets.find({meetId: maybeId}).fetch(); //***RETURNS NOTHING!***

return maybeMeet.length ? <Created meet={maybeMeet[0]} /> : <NotFound />;
}} />
<Route path="*" render={() => {
return <NotFound />
}} />
</Switch>
</Router>
</div>
);

这里是我发布数据的地方(`meets.js' 的一部分):

if (Meteor.isServer) {
Meteor.publish('allMeets', function() {
return Meets.find();
});
}

如果您需要查看更多信息,请查看完整代码的存储库:https://github.com/kpeluso/meetr

对于困惑的代码,我深表歉意 - 这是一个新项目。

最佳答案

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

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

有关如何执行此操作的更多信息,请参见文档: https://guide.meteor.com/react.html#using-withTracker

关于javascript - 为什么 Collection.find() 在我的 Meteor 客户端上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51069353/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com