2014-05-05 88 views
0

我都內置了Laravel的API,它的格式返回JSON像這樣的:

{ 
    "data":{ 
    "errors":{ 
     "username":"The username has already been taken.", 
     "email":"The email has already been taken." 
    } 
    }, 
    "success":true, 
    "status":400 
} 

在這種情況下,我試圖創建一個用戶以用戶名和已經存在的電子郵件地址。這是我用我的控制器內的該角$資源代碼:

var user = new User({ 
    username: $scope.user.username, 
    email: $scope.user.email, 
    password: $scope.user.password 
}); 

var response = user.$save(function(data) { 
    console.log(data); 
}, function(data) { 
    if (data.status === 400) { 
     angular.forEach(data.data.data.errors, function(error) { 
      console.log(error); 
     }); 
    } 
}); 

那麼這是什麼做的是發送POST請求/users的API,如果它回來與非200狀態代碼,它檢查它是否是一個400代碼,這意味着驗證錯誤和console.log'這些錯誤消息。果然,我將錯誤消息輸出到控制檯。

我想知道的是,如果有比data.data.data.errors更好的方式來訪問錯誤消息。由於API將響應數據包裝在data字段中,並且Angular返回請求的$resource而不是實際的服務器響應,因此會導致用於獲取錯誤消息的相當難看的數量的屬性。

有沒有更好的方法來做到這一點?

回答

1

我認爲簡短的答案是'不'。但是,如果是我,我可能會洗牌一些變數,讓事情變得更好。

user.$save(function(data) { 
    console.log(data); 
}, function(response) { 
    if (response.status === 400) { 
     var data = response.data.data 
     angular.forEach(data.errors, function(error) { 
      console.log(error); 
     }); 
    } 
}); 

如果我有過API,我也不會在包裝冗餘三級data對象errors控制。這給出了一個完全可以接受的代碼imo。

{ 
    "errors":{ 
    "username":"The username has already been taken.", 
    "email":"The email has already been taken." 
    }, 
    "success":true, 
    "status":400 
} 

user.$save(function(data) { 
    console.log(data); 
}, function(response) { 
    var data = response.data 
    if (data.status === 400) { 
     angular.forEach(data.errors, function(error) { 
      console.log(error); 
     }); 
    } 
});