为angularjs http请求创建自定义处理程序

时间:2017-03-09 11:57:16

标签: javascript angularjs angular-services angular-http angular-http-interceptors

到目前为止,我的大部分http请求都是这样的。

控制器调用服务,然后调用then块

ConceptService.save(concept)
.then(function(res){
    if(res.error){ throw new ErrorHandler(res.error)}
    // handle response here
})

ConceptService像这样处理请求......

// ConceptService.save

function save(vocab){

        var request = {
            url: CONFIG.URL + 'conceptService/save',
            method: 'PUT',
            data: vocab
        }

        return $http(request)
        .then(function(res){
            return res;
        })
        .catch(function(err){
            return err;
        })

    }

有时我会格式化从该服务中的服务器返回的数据

// ConceptService.getAllConceptContextType

function getAllConceptContextType(){

        if(ConceptService.conceptContextTypes){
            var deferred = $q.defer();
            deferred.resolve(ConceptService.conceptContextTypes);
            return deferred.promise;
        }

        var request = {
            url: CONFIG.URL 'conceptService/getAllConceptContextType' 
            method: 'GET',
        }

        return $http(request)
        .then(function(res){
            var conceptContextTypes = new Object();
            for(var i = 0; i < res.data.length; i++){
                conceptContextTypes[res.data[i].id] = res.data[i].type;
            }
            ConceptService.conceptContextTypes = conceptContextTypes;
            return conceptContextTypes;
        })
        .catch(function(err){
            return err;
        })
    }

最近,我一直认为将这些http调用引导到中央服务可能会更好,而且我一直在尝试使用另一个名为HttpRequestHandler的服务注入ConceptService的代码,该服务处理实际请求所有调用并返回响应。它看起来像这样。

// ConceptService.save

function save(vocab){

        var request = {
            url: CONFIG.URL + 'conceptService/save',
            method: 'PUT',
            data: vocab
        }

        return HttpRequestHandler.handle(request)
        .then(function(res){
            //format data here if necessary
            return res;
        })

    }

和HttpRequestHandler ......

// HttpRequestHandler.handle

function handle(request){

        return $http(request)
        .then(function(res){
            return res.data;
        })
        .catch(function(err){
            return err;
        })
    }

我想我只想得到任何人对这种模式,问题或潜在陷阱的反馈。我看到了几个好处。每个呼叫所需的过滤器和会话数据可以在一个地方添加/修改,并且错误将在一个地方被捕获。代码有点干净,我的一些服务中有很多方法。但是,我有点担心它可能会影响性能,而且这个设计可能还有其他负面因素,我并不十分清楚。任何对此有一定经验的人的任何建议或反馈都将不胜感激!

0 个答案:

没有答案