Javascript angularjs$httpProvider拦截器文档

Javascript angularjs$httpProvider拦截器文档,javascript,angularjs,http,interceptor,angular-services,Javascript,Angularjs,Http,Interceptor,Angular Services,我对angular(和编程)是个新手,这里有一个看似简单的问题,但我想不出来 一些教程建议使用$httpProvider.interceptors.push('interceptorName')来操作http请求和响应 我想知道更多关于拦截器的事情,所以我查看了官方文档,但我找不到任何与拦截器相关的东西,在$httpProvider()中只有一个方法(useApplyAsync([value]);)和一个属性(默认值) 我从其他教程中知道拦截器是一个常规服务工厂,我知道如何使用它,但我的问题是:

我对angular(和编程)是个新手,这里有一个看似简单的问题,但我想不出来

一些教程建议使用
$httpProvider.interceptors.push('interceptorName')
来操作http请求和响应

我想知道更多关于拦截器的事情,所以我查看了官方文档,但我找不到任何与拦截器相关的东西,在
$httpProvider
()中只有一个方法(useApplyAsync([value]);)和一个属性(默认值)

我从其他教程中知道拦截器是一个常规服务工厂,我知道如何使用它,但我的问题是:由于语法是
$httpProvider.interceptors.push('interceptorName')
,那么我希望在
$httpProvider
中找到一个名为“interceptors”的属性,但事实上我找不到。是我错过了什么让我感到困惑?还是我的概念从根本上说是完全错误的?

拦截器在最底层

下面是一个如何编写的示例

.config([
  '$httpProvider',
  function($httpProvider) {

    var interceptor = [
      '$q',
      '$rootScope',
      'userSession',
      function($q, $rootScope, userSession) {

        var service = {

          // run this function before making requests
          'request': function(config) {

            if (config.method === 'GET' || userSession.isAuth()) {
              // the request looks good, so return the config
              return config;
            }

            // bad request, so reject
            return $q.reject(config);

          }

        };

        return service;

      }
    ];

    $httpProvider.interceptors.push(interceptor);

  }
])
$httpProvider
文档页面上没有关于拦截器的内容是因为开发人员没有在文档中包含以下代码:

一般来说,文档是不完整、不准确和/或混乱的。直到最近,当我无法找到或理解某些东西时,我一直认为我是个问题,但我发现这通常是因为文档太糟糕了。然而,我们都应该感谢我们有这么好的工具可以使用,并记住,文档可能很差,因为时间必须集中在编写工具上,而不是工具手册上


最可靠的“文档”是源代码本身,尽管它的可读性要差得多!在我上面链接的源代码中,您可以看到
this.interceptors=[]
引用了
$httpProvider
,因此它将属性
拦截器
分配给
$httpProvider
,值为空数组。要添加您的拦截器,只需将您的拦截器
push()
添加到此阵列。

这里有一篇关于拦截器的好文章:。我以前已经读过这篇文章,但它没有回答我的问题,请仔细阅读我的问题,我的问题似乎是一个普遍的误解,而不是与拦截器相关的特定问题,谢谢。我不想回答-这是一个评论。我不认为这是一个评论,这是一个问题,问题是:为什么我不能在$httpProvider文档中找到interceptors属性?我不是在质疑你的问题,我是在评论我的评论,没有回答。我发表评论的唯一原因是我愿意提供帮助,但我对这个主题没有足够的信心,但我记得这篇文章在理解拦截器方面帮助了我很多。我还对这个问题投了更高的票,因为我觉得它很有趣,我喜欢理解事情是如何工作的,我喜欢它,这样我就可以看到进展。谢谢你的回答,它有点清晰,但仍然无法解决我的问题:如果语法是$httpProvider.interceptors.push(…),为什么$httpProvider文档中没有名为interceptor的属性?我更新的答案对您有意义吗?文档通常难以理解且不完整。这是不幸的,但很典型。谢谢你更新了答案,现在它看起来很完美,因为它解释得很清楚,并为我提供了文档的总体情况。任何像我这样的初学者在阅读你的答案后,都会对编码不那么沮丧,也会更加自信。我在Angular docs中找到了这一点,并与你分享。看看这个函数返回什么。“反序列化的东西”什么?因为我的第一语言不是英语,我可能会误解你的意思。我想你的意思是,有时候文件很糟糕,因为“thingy”是一个有趣的术语,不应该放在官方文件中。是这样吗?
/**
   * @ngdoc property
   * @name $httpProvider#interceptors
   * @description
// etc