首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不接受修改api调用urls的$http请求

问不接受修改api调用urls的$http请求
EN

Stack Overflow用户
提问于 2015-10-09 13:26:07
回答 3查看 3.3K关注 0票数 1
代码语言:javascript
复制
var app = angular.module('app');
// register the interceptor as a service
app.factory('myHttpInterceptor', function($q ) {
    return {

        'request': function(config) {
            return config;
        }
    };
});

我试图修改api调用的url,并将api url追加到每个服务函数insted的拦截器中的ajax调用的开头,如下

代码语言:javascript
复制
    function getAssesmentResults(params) {

        return $http.get(url.api + '/results', {params: params})
            .then(function(response) {
                return response.data;
            });
    }

但是,拦截器拦截所有的http请求,比如.css、.html或.json文件。在不修改其他http请求的情况下,修改拦截器中的urls的好方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-09 13:41:43

在 has a facility to intercept and rewrite URLs上配置的$httpProvider。当我在生产中运行时,与开发模式相比,我有一个额外的令牌:'/rest/‘,并且在拦截器中检测到生产模式(前缀packing )。这在我的app.js里

代码语言:javascript
复制
var rest_srvr = 'http://dev-pc.example.com:8000'
app.factory('REST_Interceptor',[
        '$location',
function($location) {
  var request = function(config) {
    if (RegExp('packing','i').test(window.location.host)) {
      return config
    }
    var rest_request_regex = new RegExp('^.*?/rest/(.*)$')
    //console.log('config.url=%s',config.url)
    config.url = config.url.replace(rest_request_regex,rest_srvr+'/$1')

    var files_request_regex = new RegExp('^/(files/(.*))$')
    config.url = config.url.replace(files_request_regex,rest_srvr+'/$1')
    //console.log('  is now config.url=%s',config.url)
    return config
  }

  var translate_subpath = function(subpath) {
    return request({url:'https://'+$location.host()+subpath}).url 
  }

  return {
    request: request,
    translate_subpath: translate_subpath
  }
}])

app.config([
          '$httpProvider','$cookiesProvider',
  function($httpProvider,  $cookiesProvider) {
    if (!RegExp('packing','i').test(window.location.host)) {
      $httpProvider.interceptors.push('REST_Interceptor')
    }
}])
票数 3
EN

Stack Overflow用户

发布于 2015-10-09 13:32:56

我会创建一个包装$http的服务。然后,在您的代码中,您将始终调用这个包而不是$http,并且能够在发送请求之前对它做任何您想做的事情。只是一个简单的例子:

代码语言:javascript
复制
module.factory('myHttp', function($http){
  return {
    get: function(url, params){
      var newUrl = "base-api-url/" + url;
      return $http.get(newUrl, params);
    }
  }
})
票数 1
EN

Stack Overflow用户

发布于 2015-10-09 13:36:18

为此使用通用服务:

通用服务

代码语言:javascript
复制
appCless.factory("$comum", function($http, $q, $injector) {
    function ajax(url, parametros, metodo) {
        var requisicao = $http({
            method: metodo,
            url: url,
            data:parametros
        });

        var promessa = requisicao.then(
            function(resposta) {
                return(resposta.data);
            },
            function(resposta) {
                return($q.reject("Something went wrong"));
            }
        );
        return promessa;
    }
    return({
        ajax:ajax
    });
});

服务

代码语言:javascript
复制
app.factory("$categoriaproduto", function($comum) {
    var categoria;
    return {
        buscar : function(neoId) {
            var promessa = $comum.ajax("/fusion/services/roi/category/product/search", "", "POST");
            promessa.then(function(req) {  
                categoria = req.data;
            });
            return promessa;
        },
        cache : function() {
            return categoria;
        }
    };
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33039504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档