2017-04-11 82 views
0

我們使用AWS和招搖,我們也有GetData方法服務如何獲取Angularjs中的狀態碼?

var getData =() => { 
    return $http({ 
     method: 'GET', 
     url: 'myURL', 
     headers: { 
      'Authorization': 'token' 
     } 
    }); 
}; 

我試圖用波紋管代碼

dataservice.getData().then(response => { 
        console.log(response) 
       }) 
       .catch((err) => { 
        console.log(err)); 
       }) 

有充分請求(使用它時,我autorized )能正常工作,我得到我的數據,但隨後令牌是無效的,我剛開錯誤whitout控制檯狀態代碼

Object {data: null, status: -1, config: Object, statusText: "", headers: function} 

招搖返回波紋管圖片enter image description here

我的目標是讓狀態碼401 '不autorized'

我們蘭巴具有波紋結構

exports.handler = (event, context, callback) => { 
    var token = event.authorizationToken; 
    // Call oauth provider, crack jwt token, etc. 
    // In this example, the token is treated as the status for simplicity. 

    switch (token.toLowerCase()) { 
     case 'allow': 
      callback(null, generatePolicy('user', 'Allow', event.methodArn)); 
      break; 
     case 'deny': 
      callback(null, generatePolicy('user', 'Deny', event.methodArn)); 
      break; 
     case 'unauthorized': 
      callback("Unauthorized"); // Return a 401 Unauthorized response 
      break; 
     default: 
      callback("Error: Invalid token"); 
    } 
}; 

我們得到這個從awsdoc

+0

應該在控制檯一些其他錯誤消息,什麼是錯誤 –

+2

你應該處理這個服務器端與錯誤 – Karim

+0

一起發送401種狀態,你可以提供一個例子嗎? – nightmare

回答

0

.success(function (response) { 
if (response.token){ 

} 
else{ 
// do else case 
} 
}) 
嘗試
+0

這不起作用 – nightmare

2

catch()您可以訪問包含statusdata的錯誤對象,您可以在其中閱讀有關失敗原因的其他信息。

angular.module('app', []).service('someService', function($http) { 
 
    const getData =() => { 
 
    return $http({ 
 
     method: 'GET', 
 
     url: 'myURL', 
 
     headers: { 
 
     'Authorization': 'token' 
 
     } 
 
    }); 
 
    }; 
 

 
    return { 
 
    getData 
 
    } 
 
}) 
 

 
describe('Some service', function() { 
 

 
    let someService, $httpBackend 
 

 
    beforeEach(module('app')) 
 

 
    beforeEach(inject((_someService_, _$httpBackend_) => { 
 
    someService = _someService_ 
 
    $httpBackend = _$httpBackend_ 
 
    })) 
 

 
    it('returns 401 status',() => { 
 
    const message = {reason: 'some reason'} 
 
    
 
    $httpBackend.whenGET('myURL').respond(401, { message }) 
 

 
    someService.getData().then((response) => { 
 
     expect(response).toBeUndefined() 
 
    }).catch(function(error) { 
 
     expect(error.status).toBe(401) 
 
     expect(error.data.message).toEqual(message) 
 
    }) 
 

 
    $httpBackend.flush() 
 
    }) 
 

 
})
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.5.2/jasmine.css"></link> 
 
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.5.2/jasmine.js"></script> 
 
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.5.2/jasmine-html.js"></script> 
 
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.5.2/boot.js"></script> 
 
<script src="//code.angularjs.org/snapshot/angular.min.js"></script> 
 
<script src="//code.angularjs.org/snapshot/angular-mocks.js"></script>

+0

我不能使用$ httpBackend.whenGET,因爲我必須使用已經創建的API – nightmare

+0

'$ httpBackend'僅用於測試目的,不要嘗試將它用於生產代碼 –

相關問題