gpt4 book ai didi

ruby-on-rails - 2015 年重新审视 Ember 处理 401

转载 作者:行者123 更新时间:2023-12-04 18:39:20 24 4
gpt4 key购买 nike

我可以在 Ember/Ember Data 中找到大量询问/回答如何从 Rails 后端处理 401 的老问题。许多,如果不是全部的话,在这一点上似乎已经过时了。我已经尝试了我能找到的一切。 (Ember-Data handling 401’s)

但无论我做什么,我都会在控制台中不断收到 401 错误,而 401 从未在我的代码中捕获。如果在任何地方/模型/任何东西中遇到 401,我想要做的就是添加一个重定向到“/”。我不需要任何身份验证或其他任何检查。

我已经尝试将它添加到应用程序路由操作以及路由器本身。

error: function (error, transition) {
console.log("err: " + error.status);
if (error && error.status === 401) {
return this.transitionToRoute('/');
}
}

我还尝试了这个 https://stackoverflow.com/a/19063009/1850353 的几种变体.
App.ApplicationAdapter = DS.RESTAdapter.extend({
ajaxError: function(jqXHR) {
var error = this._super(jqXHR);
console.log("jqXHR: " + jqXHR.status);
if (jqXHR && jqXHR.status === 401) {
#handle the 401 error
}
return error;
}
});

我显然是个菜鸟,所以也许我在这里遗漏了一些简单的东西。我的 console.log 都没有被触发,除非它是因为我引入的一个新错误,试图让它工作。是否有当前的“最佳实践”风格的方式来做到这一点?

最佳答案

这里的其他两个答案都很好并且可以正常工作,但是恕我直言,有一些不受欢迎的警告。

我强烈建议实现 Ember.onerror钩。任何未处理的 Promise 拒绝都将最终陷入困境。如果您使用的是 Ember-CLI,则可以使用初始化程序来实现它。

// app/initializers/on-error.js
export default {
name: 'on-error',
initialize: function(container, app) {
Ember.onerror = function(error) {
if(error && error.status === 401) {
// Ember 2.1 adds a public lookup function. Older versions
// need to use the container.
var router = app.lookup ? app.lookup('router:main') :
app.__container__.lookup('router:main');
// Even future versions of ember are likely to have an
// accessible router service to do this work.
router.transitionTo('sign-in');
}

if(error && error.stack) {
// Uncaught exception - Log stacktrace to server
}
};
}
}

如上所述,这将处理所有未捕获的 Promise 拒绝。因此,这仍然为您在组件中本地处理 Promise 提供了很大的灵 active 。例如:
export default Ember.Component.extend({
actions: {
saveChanges: function() {
this.get('model').save().then(null, (reason) => {
if(/* reason is validation error */) {
this.set('validationError', reason.errorMsg);
} else {
throw reason;
}
})
}
}
});

请注意,在上面的 promise 拒绝处理程序中,如果我们无法处理错误,我们会重新抛出它。这个非常重要。重新抛出错误将使任何额外的链式 Promise 处理程序有机会处理它。最终它将达到 Ember.onerror如果不处理。

关于ruby-on-rails - 2015 年重新审视 Ember 处理 401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29926638/

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