如何在Angular JS中访问$ http服务请求对象?

时间:2016-03-01 12:49:20

标签: angularjs angular-http

我正在使用$ http服务发出http请求,如下所示:

$http({
        url: "URL",
        method: "POST",
        data: payload,
        headers :{
            "Content-Type": "application/json",
            "access_token": xyz
        }                
    }).then(function (response) {
        $log.debug("Response :",response);
    }, function (error) {
        $log.debug("error :",error);
    });

我需要访问我发送的请求对象(以及标题等)。代码可以吗?

2 个答案:

答案 0 :(得分:1)

使用interceptor。这是一个good article和一个例子。

module.factory('timestampMarker', [function() {  
    var timestampMarker = {
        request: function(config) {
            config.requestTimestamp = new Date().getTime();
            return config;
        },
        response: function(response) {
            response.config.responseTimestamp = new Date().getTime();
            return response;
        }
    };
    return timestampMarker;
}]);

module.config(['$httpProvider', function($httpProvider) {  
    $httpProvider.interceptors.push('timestampMarker');
}]);

使用拦截器将使您能够读取请求或向请求添加标头等。希望它有所帮助。

答案 1 :(得分:1)

您可以在示例中看到请求属性:

$http.post('/service', params).success(
    function(data, status, headers, config) {
        //...
        console.log('properties', config.method, config.headers['Content-Type'], config);
});

或者如果您想以更全局的方式在请求之前/之后查看/更改属性,您可以使用拦截器:

app.config(['$httpProvider', function($httpProvider) {
    $httpProvider.interceptors.push(['$q', function($q) {
        return {
            'request': function(config) {
                // for example:
                config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
                // same more logic ...

                return config;
            },
            'response': function(response) {
                // for example:
                if (!response.data || !response.data.status) {
                    return $q.reject(response);
                }
                // same more logic ...

                return response;
            },
            'responseError': function(rejection) {
                // same more logic ...
            }
        };
    }]);
}]);