angular $ http.get / restangular调用失败

时间:2016-11-23 15:59:30

标签: javascript angularjs http cors restangular

我有一个离子应用程序(使用角度js)。我正在尝试使用restangular api调用我的localserver(node express)(还尝试使用$ http.get)。

我将基本网址设为

RestangularProvider.setBaseUrl('https://localhost:3000');

我定义了一个拦截器来添加自定义标头:

interceptors.serialNumber = function (element, operation, what, url, headers, query) {
  return {
    headers: angular.extend({
      'x-serialnumber': deviceStore.serialNumber
    }, headers)
  };
};

我尝试了以下restangular调用:

Restangular.one('Admin').get()
     .then(function (data) {
        console.log(data);
       });
     }, function (error) {
       console.log(error);
     });

以及使用$ http调用的以下内容:

$http({
        method: 'GET',
        url: 'https://localhost:3000/Admin',
        headers: {
          'Content-Type': 'application/json',
          'x-serialnumber': '000000000'   
        }
      }).then(function (data) {
        console.log(data);
      }, function (error) {
        console.log(error);
      });

我总是得到错误条件,其中data = null | status = -1 |状态文本= “”

我在服务器端没有看到任何请求。它会立即进入失败案例。

如果删除自定义标题,我会在服务器端看到请求并获得良好响应(即200)。

在服务器端,我使用的是cors模块:     var app = express();     app.use(CORS());

1 个答案:

答案 0 :(得分:0)

我需要做的是以下内容:

$http({
  method: 'GET',
  url: 'https://example.com/DUMMY'
}).then(function successCallback(response) {
  $http({
    method: 'GET',
    url: 'https://example.com',
    headers: {
      'x-serialnumber': deviceStore.serialNumber
    }
  }).then(function successCallback(response) {
    console.log('SUCCESS');
  }, function errorCallback(response) {
    console.log('FAILURE');
  });
}, function errorCallback(response) {
  console.log('FAILURE');
});

从本质上讲,我需要使用 NO 自定义标头发送“初步”GET请求。 GET请求可以是我的节点快速服务器上的任何内容。在此“初步”GET请求之后,我可以使用自定义标头执行GET请求。

特别是在服务器端,我看到以下内容:

GET /DUMMY 200 10ms - 2b
OPTIONS / 204 1ms
GET / 200 13ms - 1.03kb

如果不执行此“初步”获取请求,我的Ionic App中的OPTIONS请求将中止 - 状态代码= -1 - 通常意味着请求已中止,并且永远不要离开Ionic App。

我仍然不明白为什么我需要这个“初步”GET请求,但这对我有用。