2017-02-16 193 views
0

我在我的app.js中有一个名为UserService的工厂,它为我执行所有用户HTTP请求。处理成功/错误响应http请求angularjs

当我尝试创建一个用户时,我有以下方法。

function create(user) { 
    return $http.post(envService.read('apiUrl') + '/auth/register', user).then(handleSuccess, handleError('Error creating user')); 
} 

然后在我的控制我做这样的事情:

function register() { 
    vm.dataLoading = true; 
    UserService.create(vm.user).then(function successCallback(response) { 
     $location.path('/'); 
     Flash.create('success', response.message); 
    }, function errorCallback(error) { 
     Flash.create('danger', error); 
     vm.dataLoading = false; 
    }); 
} 

函数来处理成功和错误

// private functions 

    function handleSuccess(res) { 
     return res.data; 
    } 

    function handleError(error) { 
     return function() { 
      return { success: false, message: error }; 
     }; 
    } 

然而,它总是进入成功回调即使响应代码是403或其他导致错误的其他内容。我在这里做错了什么?

+0

你'handleError'被立即调用。 'then'的参数必须是函数 – charlietfl

+0

'post'看起来应该不是这样吗? }'return $ http.post(envService.read('apiUrl')+'/ auth/register',user).then(handleSuccess,function(){handleError('Error creating user')});' – Nope

+0

@Fran那些是jQuery'$ .ajax'回调 – charlietfl

回答

0

在角JS,当您为“$ HTTP”,你可以选择不参数设置为功能类似于

$http.get('/someUrl', config).then(successCallback, errorCallback); 

回调函数或您提供在他们里面有回调的功能,如

$http({ 
method: 'GET', 
url: '/someUrl' 
    }).then(
     function successCallback(response) {}, 
     function errorCallback(response) {} 
     ); 

在另一方面,如果你想打电话给你自己的功能在回拨,可以选择这种方式,

 $http(
     { 
     method: this.url.method, 
     url: serviceURL, 
     } 
    ). 
     success(function(data, status, headers, config) { 
      successCallback(data, status, headers, config); 
     }). 
     error(function(data, status, headers, config) { 
     errorCallback(data, status, headers, config); 
     }); 

所以,基本上你的回调函数需要一个“响应”参数包含

  1. 数据 - {字符串|对象} - 与变换函数变换的响应体。
  2. status - {number} - 响应的HTTP状态码。
  3. 头文件 - {function([headerName])} - 头文件getter函数。
  4. config - {Object} - 用于生成请求的配置对象。
  5. statusText - {string} - 响应的HTTP状态文本。

在你的代码中,我会改变 handleError('Error creating user')一些适当的回调,并在回调中接收该对象。

进行了详细的了解,请阅读this

+0

因此,如果我明显地选择第一种方式,而不是设置参数。我可以做以下功能创建(用户)返回$ http.post(envService.read('apiUrl')+'/ auth/register',user); }并像我现在那样处理我的控制器中的回调? – Reshad

+0

是的,你可以做到这一点,但在这种情况下,你的控制器内的回调应该有一个“响应”对象作为参数。 –