gpt4 book ai didi

javascript - 从 Angular $resource 访问实际服务器响应

转载 作者:行者123 更新时间:2023-12-03 12:42:58 29 4
gpt4 key购买 nike

我在 Laravel 中内置了一个 API,它以如下格式返回 JSON:

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

在本例中,我尝试使用已存在的用户名和电子邮件地址创建用户。这是我在 Controller 中使用的 Angular $resource 代码:

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 而不是实际的服务器响应,因此会导致相当难看的数据量用于获取错误消息的属性。

有更好的方法吗?

最佳答案

我认为简短的答案是“不”。然而,如果是我,我可能会调整一些变量以使事情变得更好一些。

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 对象中。在我看来,这给出了完全可以接受的代码位。

{
"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);
});
}
});

关于javascript - 从 Angular $resource 访问实际服务器响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23463032/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com