本地存储在 rendr 控制器中未定义

localStorage undefined in rendr controller

我正在 500 ReferenceError: localStorage is not defined 我的 Rendr 应用程序的控制器中。我试图从 localStorage 获取我的授权令牌并将其设置为 header,然后再获取规范。我也试过 window.localStorage 但后来我得到 window 未定义。我在控制器级别无法访问 window object 吗?如果没有,我将如何从 localStorage 中获取。

这是我的控制器代码。

module.exports = {
  show: function(params, callback) {
    var spec = {
      model: {
        model: 'Company', params: { name: params.id }
      }
    };

    var options = {},
        Authorization = localStorage.getItem('Authorization');

    options.header = {
      "Authorization": Authorization
    }

    this.app.fetch(spec, options, function (err, results) {
      // return if there is an error fetching the user
      if (err) return callback(err);

      // set the title of the page to the users name
      this.app.set('title', results.model.get('name'));

      // render the page with the results from the fetch
      callback(null, results);
    }.bind(this));
  }
};

欢迎来到 Rendr :-)

Rendr 是同构的(或“通用的”),这意味着它的很多代码 运行 都在服务器和浏览器中。如果你有你只想 运行 的代码在浏览器上有两种方法可以做到这一点:

  1. 在视图中有一个名为 postRender 的自定义方法 - 该方法在服务器上不是 运行,在浏览器上只有 运行。这是放置所有浏览器特定代码的标准位置。缺点是页面渲染后是运行

  2. 您可以将代码包装在 if (window !== 'undefined') {...} 中以确保它在浏览器中仅 运行s。缺点是它永远不会在服务器上运行。

在我们的 Rendr 应用程序中,我们使用了一些 localstorage,并且不得不将其嵌入基本模板的最顶部。这有点奇怪,因为本地存储的概念(浏览器具有持久性)与同构应用程序的概念(服务器和浏览器可以相同)相冲突。所以他们合作得不是很好。