仅当我直接点击页面时才会出现 Backbone 的 401 错误

Get a 401 error with Backbone only when I hit a page directly

如果我直接从 url 栏点击页面,我的本地 Backbone 应用程序部署会出现 401 错误(实时测试部署会出现 500 错误)。当我请求基本路线时,我没有遇到问题,奇怪的是,当我单击将获取页面的按钮时,我也没有遇到问题。 视图是一个列出项目集合的数组。 我希望用户能够刷新页面。

我刚接触Backbone,所以我很难有效地调试。

我使用了 $(document).ajaxErrorif (xhr.status == 401) 嵌套在其中被调用。但我不想调用登录​​路由,因为目标只是刷新页面。

下面是部分代码:

var MainRouter = Backbone.Router.extend({
  initialize: function() {
    return this.bind("all", this.change);
  },
  routes: {
    "": "main",
    "users": "users",
    "user/:id": "user",
    "stores": "stores",
    "store/add": "addStore",
    "store/edit/:id": "editStore",
    "store/:id": "store"
  },
  dashboard: function() {
    return ROOT.VIEW = new MainView();
  },
  stores: function() {
    return ROOT.VIEW = new StoresView({
      collection: new Stores()
    });
  },
  store: function(id) {
    return ROOT.VIEW = new StoreView({
      model: new Store({
        id: id
      })
    });
  }
});


$((function(_this) {
  return function() {
    _this.USER = new Administrator();
    _this.MAIN = new MainView({
      model: _this.LOGIN = new LoginState()
    });
    $('#view').html(_this.MAIN.render().el);
    _this.App = new MainRouter();
    Backbone.history.start({
      pushState: true
    });
    return $.ajaxSetup({
      statusCode: {
        401: function() {
          localStorage.setItem('apiKey', null);
          return location.reload();
        }
      }
    });
  };
})(this));

我们非常欢迎任何建议或建议。

谢谢!

看起来登录回调函数在这个过程中被调用得太晚了,也就是说在当然失败的请求之后。我用 jQuery 承诺修复了这个问题,还通过 Backbone.history.location.pathname 检查登录状态和当前路由。如果用户未登录并尝试直接连接到该页面,我只是将他重定向到项目的根目录,因为此应用程序中只有一个入口点。