【问题标题】:Failed to instantiate module httpProvider.responseInterceptors无法实例化模块 httpProvider.responseInterceptors
【发布时间】:2015-01-30 19:45:28
【问题描述】:

当我尝试在 AngularJs 中使用拦截器时出现以下错误,Requirejs 与 ui-router。如果我与 $routeProvider (ngRoute) 一起使用,那就完美了。

代码有什么问题?

谢谢。

无法实例化模块 devWeb,原因是: TypeError:无法读取未定义的属性“推送” 在 ResponseInterceptor

代码进行拦截。

(function () {
  "use strict";

  define(
    function ()  {

        var ResponseInterceptor = function ( $httpProvider ) {
            var globalResponseInterceptor = function ( promise ) {

                    var onSuccess = function ( packet ) {

                        if( angular.isString(packet.data) ) {
                            return packet;
                        }
                        return packet;
                    };
                    var onFault = function (fault) {

                        var error = angular.isDefined( fault.error ) ? fault.error :

                            angular.isDefined( fault.status ) ? {
                                code: fault.status,
                                message: "Unexpected Server Error"
                            } : {
                                code: "404",
                                message: "Not Found"
                            };
                        return $$q.reject( error) ;
                    };
                    return promise.then( onSuccess, onFault );
            };
            var registerInterceptor = function ( sessao, $rootScope ,$q ) {
                    $$q         = $q;
                    $scope      = $rootScope;
                    errorModel  = sessao.error;

                    return globalResponseInterceptor;
            };

            $httpProvider.responseInterceptors.push( [ "sessao", "$rootScope", "$q", registerInterceptor ] );

        };

        return [ "$httpProvider", ResponseInterceptor ];
});

}());

要实例化的代码。

define([...],
    function ( RouteManagerServico, ResponseInterceptor ) {

        var app, appName = 'devWeb';

        app = angular
                .module( appName, [ "ngCookies", "ui.router", "ngRoute",  "ngSanitize"] )

                .config( RouteManagerServico )
                .config( ResponseInterceptor )

                .run( [ "$rootScope", "$state", "$location", function( $rootScope, $state, $location ) {
                    $rootScope.$state    = $state;
                    $rootScope.$location = $location;
                }] );

        angular.bootstrap( document.getElementsByTagName("body")[0], [ appName ] );


        return app;
    }
);

【问题讨论】:

  • 问题是 angular 1.2 到 1.3 的版本。之前 httpProvider.responseInterceptors 现在是 $httpProvider.interceptors。链接 docs.angularjs.org/guide/migration

标签: angularjs requirejs angular-ui-router route-provider


【解决方案1】:

我在从 angular 1.2 迁移到 1.3 时遇到了同样的问题,下面的文章对如何解决与拦截器相关的问题很有见地。

https://github.com/vkarpov15/thecodebarbarian.com/blob/master/lib/posts/20150124_angularjs_interceptors.md

【讨论】:

    猜你喜欢
    • 2014-05-30
    • 2014-06-04
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多