【问题标题】:Uncaught Error: [$injector:unpr] Unknown provider: sessionInjectorProvider未捕获的错误:[$injector:unpr] 未知提供者:sessionInjectorProvider
【发布时间】:2015-04-09 20:34:19
【问题描述】:

我是 angular js、loopback 和 nodejs 的新手,

在 Angular 应用程序中实现身份验证时,出现以下错误

Uncaught Error: [$injector:unpr] Unknown provider: sessionInjectorProvider <- sessionInjector <- $http <- $compile

我正在浏览此文档,但没有任何帮助。 http://www.webdeveasy.com/interceptors-in-angularjs-and-useful-examples/

当我为 sessionInjector 添加以下行时出现此错误

angular.module('myApp', []).factory('sessionInjectorProvider', ['SessionService', function(SessionService) {
    var sessionInjector = {
        request: function(config) {
            if (!SessionService.isAnonymus) {
                config.headers['x-session-token'] = SessionService.token;
            }
            return config;
        }
    };
    return sessionInjector;
}]);

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

【问题讨论】:

  • 每次你做angular.module('myApp', [])模块都是新创建的,之前注册到该模块的任何东西都消失了。可能你可能想做angular.module('myApp').config.. 也必须将sessionInjectorProvider 注入拦截器sessionInjectorProvider
  • 所以试试angular.module('myApp').config(['$httpProvider', function($httpProvider) { $httpProvider.interceptors.push('sessionInjectorProvider'); }]);
  • 这两项更改是否仍然遇到相同的问题。
  • 尝试在 plunker 中复制这个错误。应该不难,它只有 2 个块。你自己会得到线索

标签: node.js angularjs angularjs-directive loopbackjs


【解决方案1】:

您的代码中肯定至少有两个错误:

angular.module('myApp', []) 创建一个模块,而angular.module('myApp') 调用该模块。这意味着在您的代码结束时,您会再次创建模块,因此会丢失您之前编写的内容。

有不同的方式来格式化这段代码,一个可以解决问题的方法是:

    angular.module('myApp', [])
        .factory('sessionInjectorProvider', ['SessionService', function(SessionService) {
            var sessionInjector = {
                request: function(config) {
                    if (!SessionService.isAnonymus) {
                config.headers['x-session-token'] = SessionService.token;
                    }
                    return config;
                }
            };
            return sessionInjector;
        }])
        .config(['$httpProvider', function($httpProvider) {
                    $httpProvider.interceptors.push('sessionInjectorProvider');
        }]);

另外,如前所述,您正在混合使用“sessionInjectorProvider”和“sessionInjector” - 您的拦截器应使用“sessionInjectorProvider”,如我上面发布的代码所示。

【讨论】:

    猜你喜欢
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 2016-03-26
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多