我对Angular $资源有疑问。我在启用了CORS的API服务器上使用它。
无论服务器返回什么错误代码(尝试过500,422,409),资源总是调用成功回调。
控制器中的动作:
@SpacePostsService.save { spaceId: @space._id }, @post, @_createSuccess, (errors)=>¬
@_createError(errors, form)
SpacePostsService:
SpacePostsService = $resource postsUrl, {},¬
query:¬
isArray: true¬
method: 'GET'¬
responseType: 'json'¬
transformResponse: (data, headers)->¬
results = data.results || data¬
results = [results] unless _.isArray(results)¬
results
有没有人知道我做错了什么?
PS。出于可读性目的,我没有显示所有代码,SpacePostService是一个工厂,它已正确地注入控制器。
答案 0 :(得分:2)
最后我发现了这个问题。事实证明我在其他地方定义了全局拦截器:
AjaxInProgress =
request: (config)->
$rootScope.$broadcast 'ajax:in-progress'
config
response: (response)->
$rootScope.$broadcast 'ajax:finished'
response
responseError: (response)->
$rootScope.$broadcast 'ajax:finished'
return response
responseError
方法中的最后一行是最重要的一行 - 因为我没有拒绝这个承诺,所以Angular认为我从错误中恢复了,它在$ resource函数中调用了成功回调。我将AjaxInProgress中的最后一行更改为:
responseError: (response)->
$rootScope.$broadcast 'ajax:finished'
$q.reject(response)
它解决了这个问题。
谢谢你们的帮助。