2017-04-11 111 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'仅用于测试目的,不要尝试将它用于生产代码 –

相关问题