2015-11-06 49 views
2

我正在MEAN堆栈上开发应用程序。我让工厂处理我的http请求,然后在我的控制器中使用该服务。使用工厂服务进行http调用并通过控制器使用它们

服务

.factory('dataSvc', function($q, $http, $timeout, $rootScope, $resource) { 

var dataSvc = {}; 

dataSvc.list = function(options) { 
    var defer = $q.defer(); 
    return $http.get(options.url).success(function(data) { 
     console.log('========data========', data) 
     defer.resolve(data); 
    }).error(function(err){ 
     console.log('======err=======', err) 
     defer.reject(err); 
    }); 

    return defer.promise; 
} 

return dataSvc; 
}); 

我有一个关于这两个问题:

  1. 即使我从后端401个状态,我总是在成功的函数结束了,所以我在做什么错在这里。

  2. 如果我从$ http.get中删除返回,则功能会中断。那么,什么是在$ http.get

控制器

dataSvc.list({url: '/api/users'}).then(function(result) { 
    console.log('result here===========', result); 
    if(result.status == 401) { 

    } 
    else { 

    } 

}); 

前需要对这个返回的关键字,也就是再由角提供的方法和成功和错误方法之间的区别?

回答

1

您可以返回$http.get对象,而不是自己创建promise,因为$http.get确实会返回承诺对象本身。之后,您需要使用.then函数而不是$http.get,该函数将具有第一个功能,当承诺得到解决时将会调用&当承诺被拒绝时,其他函数将被调用。

然后您收到的响应对象在.then函数中存在各种数据。

data - {string | Object} - 使用transform函数转换的响应正文。 状态 - {number} - 响应的HTTP状态码。

头文件 - {function([headerName])} - 头文件getter函数。

config - {Object} - 用于生成请求的配置对象。

statusText - {string} - 响应的HTTP状态文本。

代码

dataSvc.list = function(options) { 
    var defer = $q.defer(); 
    return $http.get(options.url).then(function(response) { 
     console.log('========response========', response) 
     return response; 
    }).error(function(err){ 
     console.log('======err=======', err) 
     return err; 
    }); 
} 

控制器

dataSvc.list({url: '/api/users'}).then(function(result) { 
    console.log('result here===========', result); 
    if(result.status == 401) { 

    } 
    else { 

    } 

}); 
+2

是的,它的工作,但还是我没有得到那为什么我收到的成功回调像401错误响应。 –

+0

你可以使用你的服务器端代码? –

+0

我正在使用的后端节点JS和这里是代码 'VAR checkAuth =功能(REQ,RES){ 如果(req.isUserLoggedIn){// 处理成功的情况下 } 其他{ 资源。发送(401,“没有授权”) } };' 我送401,如果如果我使用http.get直接在控制器然后我在错误回调 –