gpt4 book ai didi

javascript - rendr Controller 中未定义 localStorage

转载 作者:行者123 更新时间:2023-12-03 08:28:12 26 4
gpt4 key购买 nike

我在 Rendr 应用程序的 Controller 中收到 500 ReferenceError: localStorage is not Defined 。我尝试从 localStorage 获取我的授权 token ,并将其设置为 header ,然后再获取规范。我也尝试过 window.localStorage 但后来我得到 window is not Defined。我无权访问 Controller 级别的窗口对象吗?如果没有,我将如何从 localStorage 获取。

这是我的 Controller 代码。

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. 在 View 中,有一个名为 postRender 的自定义方法 - 该方法不在服务器上运行,而仅在浏览器上运行。这是放置所有浏览器特定代码的标准位置。缺点是它在页面渲染后运行。

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

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

关于javascript - rendr Controller 中未定义 localStorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33458238/

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