我在Laravel中内置了一个API,它以如下格式返回JSON:
{
"data":{
"errors":{
"username":"The username has already been taken.",
"email":"The email has already been taken."
}
},
"success":true,
"status":400
}
在这种情况下,我尝试使用已存在的用户名和电子邮件地址创建用户。这是我在我的控制器中使用的Angular $资源代码:
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);
});
}
});
所以这样做是在API上向/users
发送POST请求,如果它返回非200状态代码,则检查它是否是400代码表示验证错误,并console.log
表示这些错误消息。果然,我将错误消息输出到控制台。
我想知道的是,是否有比data.data.data.errors
更好的方式来访问错误消息。看到API将响应数据包装在data
字段中,并且Angular返回请求的$resource
而不是实际的服务器响应,这会导致使用相当难看的数量的属性来获取错误消息。
有更好的方法吗?
答案 0 :(得分: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,我就不会将errors
包装在冗余的第三级data
对象中。这给了一个完全可以接受的代码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);
});
}
});