Satellizer 导致 Angular 使用 OPTIONS 请求预先执行我所有的其余查询

Satellizer causes Angular to pre-flight ALL of my rest queries with an OPTIONS request

如果所有服务器都响应一个 OPTIONS 请求,这将不是问题,但 Satellizer 甚至会导致 Angular 预先发送一个内容类型为 text/plain 的 GET 请求。实际上,它破坏了我一半的其他 REST 查询。

在查看代码并研究 Angualr 的 httpProvider 之后,我意识到 Sateliizer 正在使用 httpProvider 的拦截器数组拦截每个请求并添加以下内容:

var token = localStorage.getItem(tokenName);
if (token && config.httpInterceptor) {
  token = config.authHeader === 'Authorization' ? 'Bearer ' + token : token;
  httpConfig.headers[config.authHeader] = token;
}

这样每个请求都会获得授权 header。因为我实际上只有一个请求需要授权 header 我修改了条件语句:

if (token && config.httpInterceptor && httpConfig.auth===true) {

然后在我的 $http.get 中为实际需要授权的单个服务添加:

        var config = {auth: true};
        $http.get(googleUrl, config)           

我使用 satellizer 库来管理授权。由于我还对第三方 API 进行 REST 调用,因此我不想包含 Authorization header。在配置块中添加 skipAuthorization:true 解决了我的问题。例如:

(function () {
  'use strict';
  angular.module('weather')
    .factory('weatherResource', ['$http', function ($http) {
      return $http({
        method: 'GET',
        url: 'http://api.openweathermap.org/data/2.5/weather?q=Bangalore&appid=a50e83454ba54b9',
        skipAuthorization: true
      });
    }]);
})();

祝你好运。