客户端javascript变量持续存在的节点JS项目?

时间:2015-12-24 00:31:52

标签: node.js meteor reactjs iron-router

我来自PHP背景,我是Node JS开发的新手。我决定尝试一个基本的Meteor JS + Iron Router + React项目。以下行为让我措手不及:

  1. 我在http://192.168.0.110:3000/dashboard/john这样的网页上,它有<a href="/dashboard/john/111222">之类的链接。首次加载页面时,客户端javascript变量myvariable的值为undefined,但我在页面加载时将其设置为myvariable="hello world"

  2. 当我点击<a href="/dashboard/john/111222">链接时,页面会加载,但令我惊讶的是,myvariable已经有hello world而不是undefined

  3. 所以即使我去了一个全新的网址,我希望整页刷新,myvariable保持了上一页的价值。由于我的PHP背景,我期待值undefined

    这对我来说是一个全新的行为,因为如果这是一个PHP项目,我将不得不明确地编写代码以给出客户端javascript变量在不同页面URL中保持不变的错觉(或者我使用ajax重绘屏幕)。但是对于我的NodeJS项目,我没有必要做任何事情,客户端变量保持了它的价值。

    所以我的问题是,这个行为叫什么? Node JS,Meteor,Iron Router或React是否对此行为负责?一旦我知道了这种行为的名称,那么我就可以谷歌并阅读详细信息。

    这是我项目的代码:

    myproject.jsx

    var myvariable;
    var configAppRoute = {action:applicationController};
    Router.route('/dashboard/:username',configAppRoute);
    Router.route('/dashboard/:username/:appid',configAppRoute);
    function applicationController()
    {
      console.log(myvariable);
      myvariable='hello world';
      console.log(myvariable);
    
      Meteor.startup(function () {
      ReactDOM.render(<App />, document.getElementById("render-target"));
      });
    }
    

    App.jsx

    App = React.createClass({
    
      render() {
        return (
          <div>
            <a href={'/dashboard/john/111222'}>click me</a>
          </div>
        );
      }
    });
    

    myproject.html

    <head>
      <title>My Project</title>
    </head>
    
    <body>
      <div id="render-target"></div>
    </body>
    

1 个答案:

答案 0 :(得分:3)

我从未使用过Iron Router,但我仍然可以自信地告诉你,这就是行为的来源。

铁路由器包括客户端路由器。这意味着您的应用实际上是一个单页应用,其行为类似于多页应用。

由于您正在编写单页应用程序,因此变量永远不会“重置”,因为您的上下文在整个用户交互期间仍然存在 - 新的“页面”将写入文档对象的SAME实例。因此,除非用户离开应用程序,否则您将保留上下文。