gpt4 book ai didi

javascript - 等待 Meteor.user()

转载 作者:搜寻专家 更新时间:2023-11-01 04:08:39 25 4
gpt4 key购买 nike

如果新用户注册,我会将他们带到入门路线,这样他们就可以输入位于 /gs 的名称。我将名称存储在当前用户的配置文件对象的名称属性中。现在,如果已经输入名称并访问 /gs 路由的用户,我想将他们重定向到根目录。在铁路由器中,我这样做:

Router.route('/gs', {
name: 'gs',
onBeforeAction: function() {
if ( Meteor.user().profile.name ) {
this.redirect('/');
} else {
this.render();
}
}
});

即使这有效,它也会向控制台打印出 2 个错误。其中之一是“无法读取未定义的属性‘配置文件’”和缺少 this.next()。任何解决这些问题的方法。

最佳答案

Your route functions and most hooks are run in a reactive computation. This means they will rerun automatically if a reactive data source changes. For example, if you call Meteor.user() inside of your route function, your route function will rerun each time the value of Meteor.user() changes. (Iron.Router Guide: Reactivity)

Hook functions and all functions that get run when dispatching to a route are run in a reactive computation: they will rerun if any reactive data sources invalidate the computation. In the above example, if Meteor.user() changes the entire set of route functions will be run again.(Iron.Router Guide: Using Hooks)

函数第一次运行时,Meteor.user()undefined。然后它的值变成一个对象。因为它是一个 react 变量,所以函数再次运行,这次没有错误。

在使用其属性之前,您应该检查是否定义了 Meteor.user()。这是一个非常(可能太多)详尽的方法:

if (Meteor.user() !== undefined) {
// the user is ready
if (Meteor.user()) {
// the user is logged in
if (Meteor.user() && Meteor.user().profile.name) {
// the name is already set
this.redirect('/');
} else {
this.render();
} else {
// the user is not logged in
} else {
// waiting for the user to be ready
}

关于javascript - 等待 Meteor.user(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27467840/

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