【问题标题】:Accessing actual server response from Angular $resource从 Angular $resource 访问实际的服务器响应
【发布时间】:2014-06-21 04:44:31
【问题描述】:

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

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

在这种情况下,我正在尝试使用已经存在的用户名和电子邮件地址创建用户。这是我在控制器中使用的 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 而不是实际的服务器响应,因此会导致用于获取错误消息的属性数量相当难看。

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: javascript angularjs laravel


    【解决方案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);
            });
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      相关资源
      最近更新 更多