我是新手,所以请谅解。 有谁能帮助我弄清楚我的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);
});
}
更新
我在以下位置找到了缓存的请求:
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组件仍返回缓存的响应
答案 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,现在看来它开始工作了。