How do I get the HTTP response status code in AngularJS 1.2

前端 未结 8 1827
半阙折子戏
半阙折子戏 2020-12-05 03:04

Using ngResource in AngularJS 1.2rc(x), how do I get the status code now?

RestAPI.save({resource}, {data}, function( response, responseHeaders )         


        
8条回答
  •  感动是毒
    2020-12-05 03:35

    I agreed responseHeaders() function will only return response's header,but you can custom it and it's useful anyway.

    1.

    To solve you problem. With the following:($$service is my $resource instance.)

    var serve = new $$service();
    serve.id = "hello_wrongPath"; // wrong path,will return 404
    serve.$get()
        .then(function (data) {
            console.log("~~~hi~~~");
            console.log(data);
            return data;
        })
        .catch(function (error) {
            console.log("~~~error~~~");
            console.log(error);
            console.log(error.status); // --> 404
            console.log(error.statusText); // --> "Not Found"
            console.log(error.config.timeout); // --> 5000
            console.log(error.config.method); // --> GET
            console.log(error.config.url); // --> request url
            console.log(error.headers("content-type"));// --> "text/plain"
            return error.$promise;
        })
        .finally(function(data){
            console.log("~~~finally~~~");
            console.log(data); // --> undefined
        });
    

    In this way,u can only catch status,statusText,timeout,method,headers(same with responseHeaders) in ERROR response.

    2.

    If you want to see response details in success response,I used a interceptor like this:

    ng.module("baseInterceptor", [])
        .factory("baseInterceptor", ["$q", function ($q) {
            return {
                'request': function (config) {
                    console.info(config);
                    //set timeout for all request
                    config.timeout = 5000;
                    return config;
                },
                'requestError': function (rejection) {
                    console.info(rejection);
                    return $q.reject(rejection);
                },
                'response': function (response) {
                    console.log("~~interceptor response success~~");
                    console.log(response);
                    console.log(response.status);
                    console.log(response.config.url);
                    return response;
                },
                'responseError': function (rejection) {
                    console.log("~~interceptor response error~~");
                    console.log(rejection);
                    console.log(rejection.status);
                    return $q.reject(rejection);
                }
            };
        }]);
    

    and then add interceptor to module:

    .config(["$httpProvider", function ($httpProvider) {
        $httpProvider.interceptors.push("baseInterceptor");
    }])
    

提交回复
热议问题