如何在基于Backbone.js的应用程序中干净地获取401

Geo*_*ieF 8 javascript amd requirejs backbone.js

在我的基于Backbone.js的应用程序中,我正在与我的API进行通信,如果没有或使用无效的身份验证令牌,则使用401进行响应.每次收到401时,我都想通过导航到#login页面进行检测.

为了获取401,我成功地包装了Backbone.sync,但是在那一点上我被卡住了.我在这里尝试了几种策略:

  1. throw 'unauthorized'在Backbone :: sync中尝试在我的路由器中获取.失败:'未捕获未授权'

  2. 尝试#.navigate '#login'关闭Backbone :: sync这不仅看起来很奇怪,而且还有我的应用程序基于AMD/require.js的问题,我不能简单地在我的包装sync函数中访问我的Backbone.Router实例.

到目前为止,我看到的唯一解决方案是创建一个"全局可用"的缓存对象,该对象获取对我的路由器实例的引用,然后将其define作为需要的依赖项.那个缓存对象必须是一个单独的东西,并打破了我的整个'请求 - 没有全局和没有命名空间' - 策略.

我有点被困在这里.任何人都能指出我对这个常见问题更清晰的解决方案吗?

And*_*sca 9

你可以在ajaxError中进行重定向:

$.ajaxError(function (event, xhr) {
            if (xhr.status == 401)
                window.location = '#login';
        });
Run Code Online (Sandbox Code Playgroud)

如果一切设置正确,则无需手动访问路由器实例.转到该URL应触发与其关联的路由功能.