meteor - Meteor 中 session 变量的零星行为

标签 meteor

我一直在摸不着头脑,为什么这段代码在某些时候可以工作,但不是全部(或至少在大部分时间)。我发现它有时确实会在浏览器中显示正确的内容,但奇怪的是,有时我会回到相同的代码,运行服务器(按照正常情况)并在加载时页面将在控制台中收到错误:TypeError: 'undefined' is not an object (evaluating 'Session.get('x').html')

(当我收到该错误时,控制台中的下一行有时会显示 Error - 引用 err 对象,而其他时候它会显示读取Object - 引用data对象!?)。

我显然遗漏了 Meteor 中的 Session 变量的一些内容,并且一定是误用了它们?希望有经验的人能给我指出正确的方向。

提前感谢您的帮助!

这是我的虚拟代码:

/client/del.html
<head>
  <title>del</title>
</head>

<body>
  {{> hello}}
</body>

<template name="hello">
  Hello World!
  <div class="helloButton">{{{greeting}}}</div>
</template>

我的客户端 JavaScript 文件是:

/client/del.js
Meteor.call('foo', 300, function(err, data) {
  err ? console.log(err) : console.log(data);
  Session.set('x', data);
});

Template.hello.events = {
  'click div.helloButton' : function(evt) {
    if ( Session.get('x').answer.toString() === evt.target.innerHTML ) {
      console.log('yay!');
    }
  } 
};

Template.hello.greeting = function() {
  return Session.get('x').html;
};

我的服务器端 JavaScript 是:

/server/svr.js
Meteor.methods({

  doubled: function(num) {
    return num * 2;
  },

  foo: function(lmt) {
    var count = lmt,
        result = {};

    for ( var i = 0; i < lmt; i++ ) {
        count++;
    }

    count = Meteor.call('doubled', count);

    result.html = "<em>" + count + "</em>";
    result.answer = count;
    return result;

  }

});

最佳答案

我认为这只是客户端第一次启动时 session 变量还没有设置。因此 Session.get('x') 将返回 undefined 直到您的方法调用 (foo) 返回,这几乎肯定不会发生在之前模板首先绘制。

但是之后它将在 session 中,因此刷新后事情可能会正常运行。

答案是在尝试访问变量之前检查它是否未定义。例如:

Template.hello.greeting = function() {
  if (Session.get('x')) return Session.get('x').html;
};

关于meteor - Meteor 中 session 变量的零星行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10858989/

相关文章:

node.js - Meteor 'forgets' 登录用户

javascript - 在 Meteor 中等待函数结果的最佳实践?

javascript - Meteor .depends() 方法

javascript - 有什么方法可以将函数的范围限定到 Meteor 中的一组不同模板吗?

javascript - Meteor:通过 DDP 登录并在单独的 Meteor 应用程序中检索当前用户对象

javascript - 按回车键清除输入字段

javascript - meteor Node :mysql custom query

javascript - 自动形成插入字段总和

javascript - 如何使用 Meteor 中的信息窗口按钮触发模式/弹出窗口?

authentication - 删除 meteor 身份验证的登录 token