如何以角度发送新请求

时间:2019-09-09 19:02:23

标签: http request angular7 http-get

我是新手,所以请谅解。 有谁能帮助我弄清楚我的get请求出了什么问题。 问题是我只从剩余后端检索一次数据数组。或似乎只是在那样工作。初始化请求获取空数组是正确的(服务器没有记录),但是在该请求之后,我在后端添加了一些记录,而在套接字事件操作之后,由于角度的原因,我又获取了该数据一次。即使在后端更改了数据,对于空数组,请求响应也与以前相同。我对尝试更改/设置标头(如Expired,Cache-Control等)感到非常厌倦。尝试使用Promise或Observable来获取这些东西。

我没有看到用于此目的的任何缓存方法。

如果我在浏览器中打开另一个选项卡并键入相同的URL,则Im将获得正确的数据以及数组中的一条记录。

有人遇到类似问题吗?我只在Google中找到了如何仅发送一个请求的方法; d但这不是我所需要的。

我还尝试使用相同的REST URL和其他正确的URL来触发页面上的按钮的操作,结果是一样的: -提取的数据,呈现在控制台日志中,在浏览器网络中,存在请求和响应 -几秒钟后,我单击了按钮,并在console.log中呈现了数据,但是在“网络”选项卡中没有请求和响应。因此,对我来说,角度似乎仅发送一个请求,然后以某种方式将响应存储在缓存中。但是正如我提到的,我没有使用缓存。

有什么想法吗?

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class ExtApiService {

  baseUrl: string = 'https://exampledomain.dev/public/inventory?id=testid';

  constructor(private httpClient: HttpClient) { }

  public getDonations() {

    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type':  'application/json',
        'Cache-Control': 'no-store',
        'Expires': '0'
      })
    };

    return this.httpClient.get(this.baseUrl, httpOptions);

  }
}

当我输入错误的url时,我得到的唯一正确的响应是,在网络标签中可见每个带有响应的请求。

我想知道如何强制执行任何请求。

哦,我没有提到刷新刷新角度页面之后,从后端添加了记录。

此外,我忘了与您分享有关行动的信息(但我认为这很清楚,没有什么可改变的):

getData() {
        this.extApi.getDonations().subscribe( data => {
            console.log("MY OWN DATA CALL");
            console.log(data);
        });
    }

I wrote some form to test requests with api, if 200 then only one call, if 404 then as many as I can click

更新

我在以下位置找到了缓存的请求: this.httpClient.handler.chain.interceptor.transferState.store 还有类似的属性: this.httpClient.handler.chain.interceptor.isCacheActive = true

我不能将该属性设置为false cuz handler是私有的,因此无法从代码中更改它。

之后,我找到了主题:

How to disable caching with HttpClient get in Angular 6 但是更改标题没有帮助。有人更熟悉拦截器和缓存请求吗?

将元标头添加到索引后,

UPDATE2:

页面上的按钮触发的请求可以正常工作,并且响应具有正确的值(生成新的请求,可在“网络”选项卡中看到),但是。当ngOnChange()之类的代码触摸组件时,httpClient组件仍返回缓存的响应

知道我还能尝试什么吗?

2 个答案:

答案 0 :(得分:0)

添加HTML内容后,我似乎开始一个接一个地收到正确的请求:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

我不明白为什么发送请求时httpOptions不能正常工作,但最重要的是它现在可以正常工作。

我希望该主题对遇到同样问题的人有所帮助。

答案 1 :(得分:0)

我开始使用isCacheActive进行研究,并获得了该页面:

how does Angular HttpInterceptor get called?

此后,我开始检查该代码,并且我注意到只有GET激活了该缓存,因此我将请求从GET更改为POST,现在看来它开始工作了。