0

我进入500 ReferenceError: localStorage is not defined了我的 Rendr 应用程序的控制器。我试图从 localStorage 获取我的授权令牌并将其设置为标题,然后再获取规范。我也尝试过 window.localStorage 但后来我得到窗口未定义。我无权访问控制器级别的窗口对象吗?如果没有,我将如何从 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));
  }
};
4

1 回答 1

1

欢迎来到 Rendr :-)

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

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

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

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

于 2015-11-01T08:19:17.217 回答